1 /* 2 * COPYRIGHT: This file is in the public domain. 3 * PROJECT: ReactOS kernel 4 * FILE: include/psdk/dvp.h 5 * PURPOSE: Directx headers 6 * PROGRAMMER: Magnus Olsen (greatlrd) 7 * 8 */ 9 10 #ifndef __DVP_INCLUDED__ 11 #define __DVP_INCLUDED__ 12 13 #if defined( _WIN32 ) && !defined( _NO_COM ) 14 DEFINE_GUID( IID_IDDVideoPortContainer, 0x6C142760,0xA733,0x11CE,0xA5,0x21,0x00,0x20,0xAF,0x0B,0xE5,0x60 ); 15 DEFINE_GUID( IID_IDirectDrawVideoPort, 0xB36D93E0,0x2B43,0x11CF,0xA2,0xDE,0x00,0xAA,0x00,0xB9,0x33,0x56 ); 16 DEFINE_GUID( IID_IDirectDrawVideoPortNotify, 0xA655FB94,0x0589,0x4E57,0xB3,0x33,0x56,0x7A,0x89,0x46,0x8C,0x88); 17 18 DEFINE_GUID( DDVPTYPE_E_HREFH_VREFH, 0x54F39980L,0xDA60,0x11CF,0x9B,0x06,0x00,0xA0,0xC9,0x03,0xA3,0xB8); 19 DEFINE_GUID( DDVPTYPE_E_HREFH_VREFL, 0x92783220L,0xDA60,0x11CF,0x9B,0x06,0x00,0xA0,0xC9,0x03,0xA3,0xB8); 20 DEFINE_GUID( DDVPTYPE_E_HREFL_VREFH, 0xA07A02E0L,0xDA60,0x11CF,0x9B,0x06,0x00,0xA0,0xC9,0x03,0xA3,0xB8); 21 DEFINE_GUID( DDVPTYPE_E_HREFL_VREFL, 0xE09C77E0L,0xDA60,0x11CF,0x9B,0x06,0x00,0xA0,0xC9,0x03,0xA3,0xB8); 22 DEFINE_GUID( DDVPTYPE_CCIR656, 0xFCA326A0L,0xDA60,0x11CF,0x9B,0x06,0x00,0xA0,0xC9,0x03,0xA3,0xB8); 23 DEFINE_GUID( DDVPTYPE_BROOKTREE, 0x1352A560L,0xDA61,0x11CF,0x9B,0x06,0x00,0xA0,0xC9,0x03,0xA3,0xB8); 24 DEFINE_GUID( DDVPTYPE_PHILIPS, 0x332CF160L,0xDA61,0x11CF,0x9B,0x06,0x00,0xA0,0xC9,0x03,0xA3,0xB8); 25 #endif 26 27 #ifndef GUID_DEFS_ONLY 28 #if defined( _WIN32 ) && !defined( _NO_COM ) 29 #define COM_NO_WINDOWS_H 30 #include <objbase.h> 31 #else 32 #define IUnknown void 33 #endif 34 35 #ifndef MAXULONG_PTR 36 #define ULONG_PTR DWORD 37 #endif 38 39 #ifdef __cplusplus 40 extern "C" { 41 #endif 42 43 typedef struct _DDVIDEOPORTCONNECT 44 { 45 DWORD dwSize; 46 DWORD dwPortWidth; 47 GUID guidTypeID; 48 DWORD dwFlags; 49 ULONG_PTR dwReserved1; 50 } DDVIDEOPORTCONNECT, *LPDDVIDEOPORTCONNECT; 51 52 typedef struct _DDVIDEOPORTDESC 53 { 54 DWORD dwSize; 55 DWORD dwFieldWidth; 56 DWORD dwVBIWidth; 57 DWORD dwFieldHeight; 58 DWORD dwMicrosecondsPerField; 59 DWORD dwMaxPixelsPerSecond; 60 DWORD dwVideoPortID; 61 DWORD dwReserved1; 62 DDVIDEOPORTCONNECT VideoPortType; 63 ULONG_PTR dwReserved2; 64 ULONG_PTR dwReserved3; 65 } DDVIDEOPORTDESC, *LPDDVIDEOPORTDESC; 66 67 typedef struct _DDVIDEOPORTBANDWIDTH 68 { 69 DWORD dwSize; 70 DWORD dwOverlay; 71 DWORD dwColorkey; 72 DWORD dwYInterpolate; 73 DWORD dwYInterpAndColorkey; 74 ULONG_PTR dwReserved1; 75 ULONG_PTR dwReserved2; 76 } DDVIDEOPORTBANDWIDTH, *LPDDVIDEOPORTBANDWIDTH; 77 78 typedef struct _DDVIDEOPORTCAPS 79 { 80 DWORD dwSize; 81 DWORD dwFlags; 82 DWORD dwMaxWidth; 83 DWORD dwMaxVBIWidth; 84 DWORD dwMaxHeight; 85 DWORD dwVideoPortID; 86 DWORD dwCaps; 87 DWORD dwFX; 88 DWORD dwNumAutoFlipSurfaces; 89 DWORD dwAlignVideoPortBoundary; 90 DWORD dwAlignVideoPortPrescaleWidth; 91 DWORD dwAlignVideoPortCropBoundary; 92 DWORD dwAlignVideoPortCropWidth; 93 DWORD dwPreshrinkXStep; 94 DWORD dwPreshrinkYStep; 95 DWORD dwNumVBIAutoFlipSurfaces; 96 DWORD dwNumPreferredAutoflip; 97 WORD wNumFilterTapsX; 98 WORD wNumFilterTapsY; 99 } DDVIDEOPORTCAPS, *LPDDVIDEOPORTCAPS; 100 101 typedef struct _DDVIDEOPORTINFO 102 { 103 DWORD dwSize; 104 DWORD dwOriginX; 105 DWORD dwOriginY; 106 DWORD dwVPFlags; 107 RECT rCrop; 108 DWORD dwPrescaleWidth; 109 DWORD dwPrescaleHeight; 110 LPDDPIXELFORMAT lpddpfInputFormat; 111 LPDDPIXELFORMAT lpddpfVBIInputFormat; 112 LPDDPIXELFORMAT lpddpfVBIOutputFormat; 113 DWORD dwVBIHeight; 114 ULONG_PTR dwReserved1; 115 ULONG_PTR dwReserved2; 116 } DDVIDEOPORTINFO, *LPDDVIDEOPORTINFO; 117 118 typedef struct _DDVIDEOPORTSTATUS 119 { 120 DWORD dwSize; 121 BOOL bInUse; 122 DWORD dwFlags; 123 DWORD dwReserved1; 124 DDVIDEOPORTCONNECT VideoPortType; 125 ULONG_PTR dwReserved2; 126 ULONG_PTR dwReserved3; 127 } DDVIDEOPORTSTATUS, *LPDDVIDEOPORTSTATUS; 128 129 typedef struct _DDVIDEOPORTNOTIFY 130 { 131 LARGE_INTEGER ApproximateTimeStamp; 132 LONG lField; 133 UINT dwSurfaceIndex; 134 LONG lDone; 135 } DDVIDEOPORTNOTIFY, *LPDDVIDEOPORTNOTIFY; 136 137 138 #define DDVPD_WIDTH 0x00000001 139 #define DDVPD_HEIGHT 0x00000002 140 #define DDVPD_ID 0x00000004 141 #define DDVPD_CAPS 0x00000008 142 #define DDVPD_FX 0x00000010 143 #define DDVPD_AUTOFLIP 0x00000020 144 #define DDVPD_ALIGN 0x00000040 145 #define DDVPD_PREFERREDAUTOFLIP 0x00000080 146 #define DDVPD_FILTERQUALITY 0x00000100 147 #define DDVPCONNECT_DOUBLECLOCK 0x00000001 148 #define DDVPCONNECT_VACT 0x00000002 149 #define DDVPCONNECT_INVERTPOLARITY 0x00000004 150 #define DDVPCONNECT_DISCARDSVREFDATA 0x00000008 151 #define DDVPCONNECT_HALFLINE 0x00000010 152 #define DDVPCONNECT_INTERLACED 0x00000020 153 #define DDVPCONNECT_SHAREEVEN 0x00000040 154 #define DDVPCONNECT_SHAREODD 0x00000080 155 #define DDVPCAPS_AUTOFLIP 0x00000001 156 #define DDVPCAPS_INTERLACED 0x00000002 157 #define DDVPCAPS_NONINTERLACED 0x00000004 158 #define DDVPCAPS_READBACKFIELD 0x00000008 159 #define DDVPCAPS_READBACKLINE 0x00000010 160 #define DDVPCAPS_SHAREABLE 0x00000020 161 #define DDVPCAPS_SKIPEVENFIELDS 0x00000040 162 #define DDVPCAPS_SKIPODDFIELDS 0x00000080 163 #define DDVPCAPS_SYNCMASTER 0x00000100 164 #define DDVPCAPS_VBISURFACE 0x00000200 165 #define DDVPCAPS_COLORCONTROL 0x00000400 166 #define DDVPCAPS_OVERSAMPLEDVBI 0x00000800 167 #define DDVPCAPS_SYSTEMMEMORY 0x00001000 168 #define DDVPCAPS_VBIANDVIDEOINDEPENDENT 0x00002000 169 #define DDVPCAPS_HARDWAREDEINTERLACE 0x00004000 170 #define DDVPFX_CROPTOPDATA 0x00000001 171 #define DDVPFX_CROPX 0x00000002 172 #define DDVPFX_CROPY 0x00000004 173 #define DDVPFX_INTERLEAVE 0x00000008 174 #define DDVPFX_MIRRORLEFTRIGHT 0x00000010 175 #define DDVPFX_MIRRORUPDOWN 0x00000020 176 #define DDVPFX_PRESHRINKX 0x00000040 177 #define DDVPFX_PRESHRINKY 0x00000080 178 #define DDVPFX_PRESHRINKXB 0x00000100 179 #define DDVPFX_PRESHRINKYB 0x00000200 180 #define DDVPFX_PRESHRINKXS 0x00000400 181 #define DDVPFX_PRESHRINKYS 0x00000800 182 #define DDVPFX_PRESTRETCHX 0x00001000 183 #define DDVPFX_PRESTRETCHY 0x00002000 184 #define DDVPFX_PRESTRETCHXN 0x00004000 185 #define DDVPFX_PRESTRETCHYN 0x00008000 186 #define DDVPFX_VBICONVERT 0x00010000 187 #define DDVPFX_VBINOSCALE 0x00020000 188 #define DDVPFX_IGNOREVBIXCROP 0x00040000 189 #define DDVPFX_VBINOINTERLEAVE 0x00080000 190 #define DDVP_AUTOFLIP 0x00000001 191 #define DDVP_CONVERT 0x00000002 192 #define DDVP_CROP 0x00000004 193 #define DDVP_INTERLEAVE 0x00000008 194 #define DDVP_MIRRORLEFTRIGHT 0x00000010 195 #define DDVP_MIRRORUPDOWN 0x00000020 196 #define DDVP_PRESCALE 0x00000040 197 #define DDVP_SKIPEVENFIELDS 0x00000080 198 #define DDVP_SKIPODDFIELDS 0x00000100 199 #define DDVP_SYNCMASTER 0x00000200 200 #define DDVP_VBICONVERT 0x00000400 201 #define DDVP_VBINOSCALE 0x00000800 202 #define DDVP_OVERRIDEBOBWEAVE 0x00001000 203 #define DDVP_IGNOREVBIXCROP 0x00002000 204 #define DDVP_VBINOINTERLEAVE 0x00004000 205 #define DDVP_HARDWAREDEINTERLACE 0x00008000 206 #define DDVPFORMAT_VIDEO 0x00000001 207 #define DDVPFORMAT_VBI 0x00000002 208 #define DDVPTARGET_VIDEO 0x00000001 209 #define DDVPTARGET_VBI 0x00000002 210 #define DDVPWAIT_BEGIN 0x00000001 211 #define DDVPWAIT_END 0x00000002 212 #define DDVPWAIT_LINE 0x00000003 213 #define DDVPFLIP_VIDEO 0x00000001 214 #define DDVPFLIP_VBI 0x00000002 215 #define DDVPSQ_NOSIGNAL 0x00000001 216 #define DDVPSQ_SIGNALOK 0x00000002 217 #define DDVPB_VIDEOPORT 0x00000001 218 #define DDVPB_OVERLAY 0x00000002 219 #define DDVPB_TYPE 0x00000004 220 #define DDVPBCAPS_SOURCE 0x00000001 221 #define DDVPBCAPS_DESTINATION 0x00000002 222 #define DDVPCREATE_VBIONLY 0x00000001 223 #define DDVPCREATE_VIDEOONLY 0x00000002 224 #define DDVPSTATUS_VBIONLY 0x00000001 225 #define DDVPSTATUS_VIDEOONLY 0x00000002 226 227 struct IDirectDraw; 228 struct IDirectDrawSurface; 229 struct IDirectDrawPalette; 230 struct IDirectDrawClipper; 231 typedef struct IDirectDrawVideoPort *LPDIRECTDRAWVIDEOPORT; 232 typedef struct IDDVideoPortContainer *LPDDVIDEOPORTCONTAINER; 233 typedef struct IDirectDrawVideoPortNotify *LPDIRECTDRAWVIDEOPORTNOTIFY; 234 235 typedef struct IDDVideoPortContainerVtbl DDVIDEOPORTCONTAINERCALLBACKS; 236 typedef struct IDirectDrawVideoPortVtbl DIRECTDRAWVIDEOPORTCALLBACKS; 237 typedef struct IDirectDrawVideoPortNotifyVtbl DIRECTDRAWVIDEOPORTNOTIFYCALLBACKS; 238 239 typedef HRESULT (*LPDDENUMVIDEOCALLBACK)(LPDDVIDEOPORTCAPS, LPVOID); 240 241 242 243 #if defined( _WIN32 ) && !defined( _NO_COM ) 244 #undef INTERFACE 245 #define INTERFACE IDDVideoPortContainer DECLARE_INTERFACE_(IDDVideoPortContainer,IUnknown)246 DECLARE_INTERFACE_( IDDVideoPortContainer, IUnknown ) 247 { 248 STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID *ppvObj) PURE; 249 STDMETHOD_(ULONG,AddRef) (THIS) PURE; 250 STDMETHOD_(ULONG,Release) (THIS) PURE; 251 STDMETHOD(CreateVideoPort)(THIS_ DWORD, LPDDVIDEOPORTDESC, LPDIRECTDRAWVIDEOPORT *, IUnknown *) PURE; 252 STDMETHOD(EnumVideoPorts)(THIS_ DWORD, LPDDVIDEOPORTCAPS, LPVOID,LPDDENUMVIDEOCALLBACK ) PURE; 253 STDMETHOD(GetVideoPortConnectInfo)(THIS_ DWORD, LPDWORD, LPDDVIDEOPORTCONNECT ) PURE; 254 STDMETHOD(QueryVideoPortStatus)(THIS_ DWORD, LPDDVIDEOPORTSTATUS ) PURE; 255 }; 256 257 #if !defined(__cplusplus) || defined(CINTERFACE) 258 #define IVideoPortContainer_QueryInterface(p, a, b) (p)->lpVtbl->QueryInterface(p, a, b) 259 #define IVideoPortContainer_AddRef(p) (p)->lpVtbl->AddRef(p) 260 #define IVideoPortContainer_Release(p) (p)->lpVtbl->Release(p) 261 #define IVideoPortContainer_CreateVideoPort(p, a, b, c, d) (p)->lpVtbl->CreateVideoPort(p, a, b, c, d) 262 #define IVideoPortContainer_EnumVideoPorts(p, a, b, c, d) (p)->lpVtbl->EnumVideoPorts(p, a, b, c, d) 263 #define IVideoPortContainer_GetVideoPortConnectInfo(p, a, b, c) (p)->lpVtbl->GetVideoPortConnectInfo(p, a, b, c) 264 #define IVideoPortContainer_QueryVideoPortStatus(p, a, b) (p)->lpVtbl->QueryVideoPortStatus(p, a, b) 265 #else 266 #define IVideoPortContainer_QueryInterface(p, a, b) (p)->QueryInterface(a, b) 267 #define IVideoPortContainer_AddRef(p) (p)->AddRef() 268 #define IVideoPortContainer_Release(p) (p)->Release() 269 #define IVideoPortContainer_CreateVideoPort(p, a, b, c, d) (p)->CreateVideoPort(a, b, c, d) 270 #define IVideoPortContainer_EnumVideoPorts(p, a, b, c, d) (p)->EnumVideoPorts(a, b, c, d) 271 #define IVideoPortContainer_GetVideoPortConnectInfo(p, a, b, c) (p)->GetVideoPortConnectInfo(a, b, c) 272 #define IVideoPortContainer_QueryVideoPortStatus(p, a, b) (p)->QueryVideoPortStatus(a, b) 273 #endif 274 #endif 275 276 #if defined( _WIN32 ) && !defined( _NO_COM ) 277 #undef INTERFACE 278 #define INTERFACE IDirectDrawVideoPort DECLARE_INTERFACE_(IDirectDrawVideoPort,IUnknown)279 DECLARE_INTERFACE_( IDirectDrawVideoPort, IUnknown ) 280 { 281 STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID * ppvObj) PURE; 282 STDMETHOD_(ULONG,AddRef) (THIS) PURE; 283 STDMETHOD_(ULONG,Release) (THIS) PURE; 284 STDMETHOD(Flip)(THIS_ LPDIRECTDRAWSURFACE, DWORD) PURE; 285 STDMETHOD(GetBandwidthInfo)(THIS_ LPDDPIXELFORMAT, DWORD, DWORD, DWORD, LPDDVIDEOPORTBANDWIDTH) PURE; 286 STDMETHOD(GetColorControls)(THIS_ LPDDCOLORCONTROL) PURE; 287 STDMETHOD(GetInputFormats)(THIS_ LPDWORD, LPDDPIXELFORMAT, DWORD) PURE; 288 STDMETHOD(GetOutputFormats)(THIS_ LPDDPIXELFORMAT, LPDWORD, LPDDPIXELFORMAT, DWORD) PURE; 289 STDMETHOD(GetFieldPolarity)(THIS_ LPBOOL) PURE; 290 STDMETHOD(GetVideoLine)(THIS_ LPDWORD) PURE; 291 STDMETHOD(GetVideoSignalStatus)(THIS_ LPDWORD) PURE; 292 STDMETHOD(SetColorControls)(THIS_ LPDDCOLORCONTROL) PURE; 293 STDMETHOD(SetTargetSurface)(THIS_ LPDIRECTDRAWSURFACE, DWORD) PURE; 294 STDMETHOD(StartVideo)(THIS_ LPDDVIDEOPORTINFO) PURE; 295 STDMETHOD(StopVideo)(THIS) PURE; 296 STDMETHOD(UpdateVideo)(THIS_ LPDDVIDEOPORTINFO) PURE; 297 STDMETHOD(WaitForSync)(THIS_ DWORD, DWORD, DWORD) PURE; 298 }; 299 300 #if !defined(__cplusplus) || defined(CINTERFACE) 301 #define IVideoPort_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) 302 #define IVideoPort_AddRef(p) (p)->lpVtbl->AddRef(p) 303 #define IVideoPort_Release(p) (p)->lpVtbl->Release(p) 304 #define IVideoPort_SetTargetSurface(p,a,b) (p)->lpVtbl->SetTargetSurface(p,a,b) 305 #define IVideoPort_Flip(p,a,b) (p)->lpVtbl->Flip(p,a,b) 306 #define IVideoPort_GetBandwidthInfo(p,a,b,c,d,e) (p)->lpVtbl->GetBandwidthInfo(p,a,b,c,d,e) 307 #define IVideoPort_GetColorControls(p,a) (p)->lpVtbl->GetColorControls(p,a) 308 #define IVideoPort_GetInputFormats(p,a,b,c) (p)->lpVtbl->GetInputFormats(p,a,b,c) 309 #define IVideoPort_GetOutputFormats(p,a,b,c,d) (p)->lpVtbl->GetOutputFormats(p,a,b,c,d) 310 #define IVideoPort_GetFieldPolarity(p,a) (p)->lpVtbl->GetFieldPolarity(p,a) 311 #define IVideoPort_GetVideoLine(p,a) (p)->lpVtbl->GetVideoLine(p,a) 312 #define IVideoPort_GetVideoSignalStatus(p,a) (p)->lpVtbl->GetVideoSignalStatus(p,a) 313 #define IVideoPort_SetColorControls(p,a) (p)->lpVtbl->SetColorControls(p,a) 314 #define IVideoPort_StartVideo(p,a) (p)->lpVtbl->StartVideo(p,a) 315 #define IVideoPort_StopVideo(p) (p)->lpVtbl->StopVideo(p) 316 #define IVideoPort_UpdateVideo(p,a) (p)->lpVtbl->UpdateVideo(p,a) 317 #define IVideoPort_WaitForSync(p,a,b,c) (p)->lpVtbl->WaitForSync(p,a,b,c) 318 #else 319 #define IVideoPort_QueryInterface(p,a,b) (p)->QueryInterface(a,b) 320 #define IVideoPort_AddRef(p) (p)->AddRef() 321 #define IVideoPort_Release(p) (p)->Release() 322 #define IVideoPort_SetTargetSurface(p,a,b) (p)->SetTargetSurface(a,b) 323 #define IVideoPort_Flip(p,a,b) (p)->Flip(a,b) 324 #define IVideoPort_GetBandwidthInfo(p,a,b,c,d,e) (p)->GetBandwidthInfo(a,b,c,d,e) 325 #define IVideoPort_GetColorControls(p,a) (p)->GetColorControls(a) 326 #define IVideoPort_GetInputFormats(p,a,b,c) (p)->GetInputFormats(a,b,c) 327 #define IVideoPort_GetOutputFormats(p,a,b,c,d) (p)->GetOutputFormats(a,b,c,d) 328 #define IVideoPort_GetFieldPolarity(p,a) (p)->GetFieldPolarity(a) 329 #define IVideoPort_GetVideoLine(p,a) (p)->GetVideoLine(a) 330 #define IVideoPort_GetVideoSignalStatus(p,a) (p)->GetVideoSignalStatus(a) 331 #define IVideoPort_SetColorControls(p,a) (p)->SetColorControls(a) 332 #define IVideoPort_StartVideo(p,a) (p)->StartVideo(a) 333 #define IVideoPort_StopVideo(p) (p)->StopVideo() 334 #define IVideoPort_UpdateVideo(p,a) (p)->UpdateVideo(a) 335 #define IVideoPort_WaitForSync(p,a,b,c) (p)->WaitForSync(a,b,c) 336 #endif 337 #endif 338 339 #if defined( _WIN32 ) && !defined( _NO_COM ) 340 #undef INTERFACE 341 #define INTERFACE IDirectDrawVideoPortNotify 342 DECLARE_INTERFACE_(IDirectDrawVideoPortNotify,IUnknown)343 DECLARE_INTERFACE_( IDirectDrawVideoPortNotify, IUnknown ) 344 { 345 STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID * ppvObj) PURE; 346 STDMETHOD_(ULONG,AddRef) (THIS) PURE; 347 STDMETHOD_(ULONG,Release) (THIS) PURE; 348 STDMETHOD(AcquireNotification)(THIS_ HANDLE *, LPDDVIDEOPORTNOTIFY) PURE; 349 STDMETHOD(ReleaseNotification)(THIS_ HANDLE) PURE; 350 }; 351 352 #if !defined(__cplusplus) || defined(CINTERFACE) 353 #define IVideoPortNotify_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) 354 #define IVideoPortNotify_AddRef(p) (p)->lpVtbl->AddRef(p) 355 #define IVideoPortNotify_Release(p) (p)->lpVtbl->Release(p) 356 #define IVideoPortNotify_AcquireNotification(p,a,b) (p)->lpVtbl->AcquireNotification(p,a,b) 357 #define IVideoPortNotify_ReleaseNotification(p,a) (p)->lpVtbl->ReleaseNotification(p,a) 358 #else 359 #define IVideoPortNotify_QueryInterface(p,a,b) (p)->QueryInterface(a,b) 360 #define IVideoPortNotify_AddRef(p) (p)->AddRef() 361 #define IVideoPortNotify_Release(p) (p)->Release() 362 #define IVideoPortNotify_AcquireNotification(p,a,b) (p)->lpVtbl->AcquireNotification(a,b) 363 #define IVideoPortNotify_ReleaseNotification(p,a) (p)->lpVtbl->ReleaseNotification(a) 364 #endif 365 #endif 366 367 #ifdef __cplusplus 368 } 369 #endif 370 #endif 371 #endif 372