VirtualBox

source: vbox/trunk/include/VBox/RemoteDesktop/VRDEImage.h@ 63942

Last change on this file since 63942 was 62476, checked in by vboxsync, 8 years ago

(C) 2016

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 9.8 KB
Line 
1/** @file
2 * VBox Remote Desktop Extension (VRDE) - Image updates interface.
3 */
4
5/*
6 * Copyright (C) 2006-2016 Oracle Corporation
7 *
8 * This file is part of VirtualBox Open Source Edition (OSE), as
9 * available from http://www.virtualbox.org. This file is free software;
10 * you can redistribute it and/or modify it under the terms of the GNU
11 * General Public License (GPL) as published by the Free Software
12 * Foundation, in version 2 as it comes in the "COPYING" file of the
13 * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
14 * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
15 *
16 * The contents of this file may alternatively be used under the terms
17 * of the Common Development and Distribution License Version 1.0
18 * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
19 * VirtualBox OSE distribution, in which case the provisions of the
20 * CDDL are applicable instead of those of the GPL.
21 *
22 * You may elect to license modified versions of this file under the
23 * terms and conditions of either the GPL or the CDDL or both.
24 */
25
26#ifndef ___VBox_RemoteDesktop_VRDEImage_h
27#define ___VBox_RemoteDesktop_VRDEImage_h
28
29#include <VBox/RemoteDesktop/VRDE.h>
30
31/*
32 * Generic interface for external image updates with a clipping region to be sent
33 * to the client.
34 *
35 * Async callbacks are used for reporting errors, providing feedback, etc.
36 */
37
38#define VRDE_IMAGE_INTERFACE_NAME "IMAGE"
39
40#ifdef __cplusplus
41class VRDEImage;
42typedef class VRDEImage *HVRDEIMAGE;
43#else
44struct VRDEImage;
45typedef struct VRDEImage *HVRDEIMAGE;
46#endif /* __cplusplus */
47
48/*
49 * Format description structures for VRDEImageHandleCreate.
50 */
51typedef struct VRDEIMAGEFORMATBITMAP
52{
53 uint32_t u32BytesPerPixel; //@todo
54} VRDEIMAGEFORMATBITMAP;
55
56typedef struct VRDEIMAGEBITMAP
57{
58 uint32_t cWidth; /* The width of the bitmap in pixels. */
59 uint32_t cHeight; /* The height of the bitmap in pixels. */
60 const void *pvData; /* Address of pixel buffer. */
61 uint32_t cbData; /* Size of pixel buffer. */
62 const void *pvScanLine0; /* Address of first scanline. */
63 int32_t iScanDelta; /* Difference between two scanlines. */
64} VRDEIMAGEBITMAP;
65
66/*
67 * Image update handle creation flags.
68 */
69#define VRDE_IMAGE_F_CREATE_DEFAULT 0x00000000
70#define VRDE_IMAGE_F_CREATE_CONTENT_3D 0x00000001 /* Input image data is a rendered 3d scene. */
71#define VRDE_IMAGE_F_CREATE_CONTENT_VIDEO 0x00000002 /* Input image data is a sequence of video frames. */
72#define VRDE_IMAGE_F_CREATE_WINDOW 0x00000004 /* pRect parameter is the image update area. */
73
74/*
75 * Completion flags for image update handle creation.
76 */
77#define VRDE_IMAGE_F_COMPLETE_DEFAULT 0x00000000 /* The handle has been created. */
78#define VRDE_IMAGE_F_COMPLETE_ASYNC 0x00000001 /* The server will call VRDEImageCbNotify when the handle is ready. */
79
80/*
81 * Supported input image formats.
82 *
83 * The identifiers are arbitrary and new formats can be introduced later.
84 *
85 */
86#define VRDE_IMAGE_FMT_ID_BITMAP_BGRA8 "BITMAP_BGRA8.07e46a64-e93e-41d4-a845-204094f5ccf1"
87
88/** The VRDE server external image updates interface entry points. Interface version 1. */
89typedef struct VRDEIMAGEINTERFACE
90{
91 /** The header. */
92 VRDEINTERFACEHDR header;
93
94 /** Create image updates handle.
95 *
96 * The server can setup a context which will speed up further updates.
97 *
98 * A failure is returned if the server either does not support requested updates
99 * or it failed to create a handle.
100 *
101 * A success means that the server was able to create an internal context for
102 * the updates.
103 *
104 * @param hServer The server instance handle.
105 * @param phImage The returned image updates handle.
106 * @param pvUser The caller context of the call.
107 * @param u32ScreenId Updates are for this screen in a multimonitor config.
108 * @param fu32Flags VRDE_IMAGE_F_CREATE_* flags, which describe input data.
109 * @param pRect If VRDE_IMAGE_F_CREATE_WINDOW is set, this is the area of expected updates.
110 * Otherwise the entire screen will be used for updates.
111 * @param pvFormat Format specific data.
112 * @param cbFormat Size of format specific data.
113 * @param *pfu32CompletionFlags VRDE_IMAGE_F_COMPLETE_* flags. Async handle creation, etc.
114 *
115 * @return IPRT status code.
116 */
117 DECLR3CALLBACKMEMBER(int, VRDEImageHandleCreate, (HVRDESERVER hServer,
118 HVRDEIMAGE *phImage,
119 void *pvUser,
120 uint32_t u32ScreenId,
121 uint32_t fu32Flags,
122 const RTRECT *pRect,
123 const char *pszFormatId,
124 const void *pvFormat,
125 uint32_t cbFormat,
126 uint32_t *pfu32CompletionFlags));
127
128 /** Create image updates handle.
129 *
130 * @param hImage The image updates handle, which the caller will not use anymore.
131 *
132 * @return IPRT status code.
133 */
134 DECLR3CALLBACKMEMBER(void, VRDEImageHandleClose, (HVRDEIMAGE hImage));
135
136 /** Set a clipping region for a particular screen.
137 *
138 * @param hImage The image updates handle.
139 * @param cRects How many rectangles. 0 clears region for this screen.
140 * @param paRects Rectangles in the screen coordinates.
141 *
142 * @return IPRT status code.
143 */
144 DECLR3CALLBACKMEMBER(int, VRDEImageRegionSet, (HVRDEIMAGE hImage,
145 uint32_t cRects,
146 const RTRECT *paRects));
147
148 /** Set the new position of the update area. Only works if the image handle
149 * has been created with VRDE_IMAGE_F_CREATE_WINDOW.
150 *
151 * @param hImage The image updates handle.
152 * @param pRect New area rectangle in the screen coordinates.
153 *
154 * @return IPRT status code.
155 */
156 DECLR3CALLBACKMEMBER(int, VRDEImageGeometrySet, (HVRDEIMAGE hImage,
157 const RTRECT *pRect));
158
159 /** Set a configuration parameter.
160 *
161 * @param hImage The image updates handle.
162 * @param pszName The parameter name.
163 * @param pszValue The parameter value.
164 *
165 * @return IPRT status code.
166 */
167 DECLR3CALLBACKMEMBER(int, VRDEImagePropertySet, (HVRDEIMAGE hImage,
168 const char *pszName,
169 const char *pszValue));
170
171 /** Query a configuration parameter.
172 *
173 * @param hImage The image updates handle.
174 * @param pszName The parameter name.
175 * @param pszValue The parameter value.
176 * @param cbValueIn The size of pszValue buffer.
177 * @param pcbValueOut The length of data returned in pszValue buffer.
178 *
179 * Properties names:
180 * "ID" - an unique string for this hImage.
181 *
182 * @return IPRT status code.
183 */
184 DECLR3CALLBACKMEMBER(int, VRDEImagePropertyQuery, (HVRDEIMAGE hImage,
185 const char *pszName,
186 char *pszValue,
187 uint32_t cbValueIn,
188 uint32_t *pcbValueOut));
189
190 /** Data for an image update.
191 *
192 * @param hImage The image updates handle.
193 * @param i32TargetX Target x.
194 * @param i32TargetY Target y.
195 * @param i32TargetW Target width.
196 * @param i32TargetH Target height.
197 * @param pvImageData Format specific image data (for example VRDEIMAGEBITMAP).
198 * @param cbImageData Size of format specific image data.
199 */
200 DECLR3CALLBACKMEMBER(void, VRDEImageUpdate, (HVRDEIMAGE hImage,
201 int32_t i32TargetX,
202 int32_t i32TargetY,
203 uint32_t u32TargetW,
204 uint32_t u32TargetH,
205 const void *pvImageData,
206 uint32_t cbImageData));
207} VRDEIMAGEINTERFACE;
208
209/*
210 * Notifications.
211 * u32Id parameter of VRDEIMAGECALLBACKS::VRDEImageCbNotify.
212 */
213#define VRDE_IMAGE_NOTIFY_HANDLE_CREATE 1 /* Async result of VRDEImageHandleCreate.
214 * pvData: uint32_t = 0 if stream was not created,
215 * a non zero value otherwise.
216 */
217
218typedef struct VRDEIMAGECALLBACKS
219{
220 /** The header. */
221 VRDEINTERFACEHDR header;
222
223 /** Generic notification callback.
224 *
225 * @param hServer The server instance handle.
226 * @param pvContext The callbacks context specified in VRDEGetInterface.
227 * @param pvUser The pvUser parameter of VRDEImageHandleCreate.
228 * @param hImage The handle, same as returned by VRDEImageHandleCreate.
229 * @param u32Id The notification identifier: VRDE_IMAGE_NOTIFY_*.
230 * @param pvData The callback specific data.
231 * @param cbData The size of buffer pointed by pvData.
232 *
233 * @return IPRT status code.
234 */
235 DECLR3CALLBACKMEMBER(int, VRDEImageCbNotify,(void *pvContext,
236 void *pvUser,
237 HVRDEIMAGE hVideo,
238 uint32_t u32Id,
239 void *pvData,
240 uint32_t cbData));
241} VRDEIMAGECALLBACKS;
242
243#endif
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette