/*==========================================================================; * * Copyright (C) 1997 Microsoft Corporation. All Rights Reserved. * * File: ddmc.h * Content: DirectDrawMotionComp include file * ***************************************************************************/ #ifndef __DDVA_INCLUDED__ #define __DDVA_INCLUDED__ #if defined( _WIN32 ) && !defined( _NO_COM ) #define COM_NO_WINDOWS_H #include #else #define IUnknown void #undef CO_E_NOTINITIALIZED #define CO_E_NOTINITIALIZED 0x800401F0L #endif #ifdef __cplusplus extern "C" { #endif /* * GUIDS used by DirectDrawVideoAccelerator objects */ #if defined( _WIN32 ) && !defined( _NO_COM ) DEFINE_GUID( IID_IDDVideoAcceleratorContainer, 0xACA12120,0x3356,0x11D1,0x8F,0xCF,0x00,0xC0,0x4F,0xC2,0x9B,0x4E ); DEFINE_GUID( IID_IDirectDrawVideoAccelerator, 0xC9B2D740,0x3356,0x11D1,0x8F,0xCF,0x00,0xC0,0x4F,0xC2,0x9B,0x4E ); #endif /*============================================================================ * * DirectDraw Structures * * Various structures used to invoke DirectDraw. * *==========================================================================*/ struct IDirectDraw; struct IDirectDrawSurface; struct IDirectDrawPalette; struct IDirectDrawClipper; typedef struct IDDVideoAcceleratorContainer FAR *LPDDVIDEOACCELERATORCONTAINER; typedef struct IDirectDrawVideoAccelerator FAR *LPDIRECTDRAWVIDEOACCELERATOR; typedef struct IDDVideoAcceleratorContainerVtbl DDVIDEOACCELERATORCONTAINERCALLBACKS; typedef struct IDirectDrawVideoAcceleratorVtbl DIRECTDRAWVIDEOACCELERATORCALLBACKS; typedef struct _tag_DDVAUncompDataInfo { DWORD dwSize; // [in] size of the struct DWORD dwUncompWidth; // [in] width of uncompressed data DWORD dwUncompHeight; // [in] height of uncompressed data DDPIXELFORMAT ddUncompPixelFormat; // [in] pixel-format of uncompressed data } DDVAUncompDataInfo, *LPDDVAUncompDataInfo; typedef struct _tag_DDVAInternalMemInfo { DWORD dwSize; // [in] size of the struct DWORD dwScratchMemAlloc; // [out] amount of scratch memory will the hal allocate for its private use } DDVAInternalMemInfo, *LPDDVAInternalMemInfo; typedef struct _tag_DDVACompBufferInfo { DWORD dwSize; // [in] size of the struct DWORD dwNumCompBuffers; // [out] number of buffers reqd for compressed data DWORD dwWidthToCreate; // [out] Width of surface to create DWORD dwHeightToCreate; // [out] Height of surface to create DWORD dwBytesToAllocate; // [out] Total number of bytes used by each surface DDSCAPS2 ddCompCaps; // [out] caps to create surfaces to store compressed data DDPIXELFORMAT ddPixelFormat; // [out] fourcc to create surfaces to store compressed data } DDVACompBufferInfo, *LPDDVACompBufferInfo; // Note that you are NOT allowed to store any pointer in pMiscData typedef struct _tag_DDVABeginFrameInfo { DWORD dwSize; // [in] size of the struct LPDIRECTDRAWSURFACE7 pddDestSurface; // [in] destination buffer in which to decoding this frame DWORD dwSizeInputData; // [in] size of other misc data to begin frame LPVOID pInputData; // [in] pointer to misc data DWORD dwSizeOutputData; // [in/out] size of other misc data to begin frame LPVOID pOutputData; // [out] pointer to misc data } DDVABeginFrameInfo, *LPDDVABeginFrameInfo; // Note that you are NOT allowed to store any pointer in pMiscData typedef struct _tag_DDVAEndFrameInfo { DWORD dwSize; // [in] size of the struct DWORD dwSizeMiscData; // [in] size of other misc data to begin frame LPVOID pMiscData; // [in] pointer to misc data } DDVAEndFrameInfo, *LPDDVAEndFrameInfo; typedef struct _tag_DDVABUFFERINFO { DWORD dwSize; // [in] size of the struct LPDIRECTDRAWSURFACE7 pddCompSurface; // [in] pointer to buffer containing compressed data DWORD dwDataOffset; // [in] offset of relevant data from the beginning of buffer DWORD dwDataSize; // [in] size of relevant data } DDVABUFFERINFO, *LPDDVABUFFERINFO; /* * INTERACES FOLLOW: * IDDVideoAcceleratorContainer * IDirectDrawVideoAccelerator */ /* * IDDVideoAcceleratorContainer */ #if defined( _WIN32 ) && !defined( _NO_COM ) #undef INTERFACE #define INTERFACE IDDVideoAcceleratorContainer DECLARE_INTERFACE_( IDDVideoAcceleratorContainer, IUnknown ) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR * ppvObj) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; /*** IDDVideoAcceleratorContainer methods ***/ STDMETHOD(CreateVideoAccelerator)(THIS_ LPGUID, LPDDVAUncompDataInfo, LPVOID, DWORD, LPDIRECTDRAWVIDEOACCELERATOR FAR *, IUnknown FAR *) PURE; STDMETHOD(GetCompBufferInfo)(THIS_ LPGUID, LPDDVAUncompDataInfo, LPDWORD, LPDDVACompBufferInfo ) PURE; STDMETHOD(GetInternalMemInfo)(THIS_ LPGUID, LPDDVAUncompDataInfo, LPDDVAInternalMemInfo ) PURE; STDMETHOD(GetVideoAcceleratorGUIDs)(THIS_ LPDWORD, LPGUID ) PURE; STDMETHOD(GetUncompFormatsSupported)(THIS_ LPGUID, LPDWORD, LPDDPIXELFORMAT ) PURE; }; #if !defined(__cplusplus) || defined(CINTERFACE) #define IVideoAcceleratorContainer_QueryInterface(p, a, b) (p)->lpVtbl->QueryInterface(p, a, b) #define IVideoAcceleratorContainer_AddRef(p) (p)->lpVtbl->AddRef(p) #define IVideoAcceleratorContainer_Release(p) (p)->lpVtbl->Release(p) #define IVideoAcceleratorContainer_CreateVideoAccelerator(p,a,b,c,d,e,f) (p)->lpVtbl->CreateVideoAccelerator(p, a, b, c, d, e, f) #define IVideoAcceleratorContainer_GetCompBufferInfo(p, a, b, c, d) (p)->lpVtbl->GetCompBufferInfo(p, a, b, c, d) #define IVideoAcceleratorContainer_GetInternalMemInfo(p, a, b, c) (p)->lpVtbl->GetInternalMemInfo(p, a, b, c) #define IVideoAcceleratorContainer_GetVideoAcceleratorGUIDs(p, a, b) (p)->lpVtbl->GetVideoAcceleratorGUIDs(p, a, b) #define IVideoAcceleratorContainer_GetUncompFormatsSupported(p,a,b,c) (p)->lpVtbl->GetUncompFormatsSupported(p, a, b, c) #else #define IVideoAcceleratorContainer_QueryInterface(p, a, b) (p)->QueryInterface(a, b) #define IVideoAcceleratorContainer_AddRef(p) (p)->AddRef() #define IVideoAcceleratorContainer_Release(p) (p)->Release() #define IVideoAcceleratorContainer_CreateVideoAccelerator(p, a, b, c,d,e,f) (p)->CreateVideoAccelerator(a, b, c, d, e, f) #define IVideoAcceleratorContainer_GetCompBufferInfo(p, a, b, c, d) (p)->GetCompBufferInfo(a, b, c, d) #define IVideoAcceleratorContainer_GetInternalMemInfo(p, a, b, c) (p)->GetInternalMemInfo(a, b, c) #define IVideoAcceleratorContainer_GetVideoAcceleratorGUIDs(p, a, b) (p)->GetVideoAcceleratorGUIDs(a, b) #define IVideoAcceleratorContainer_GetUncompFormatsSupported(p,a,b,c) (p)->GetUncompFormatsSupported(a, b, c) #endif #endif /* * IDirectDrawVideoAccelerator */ #if defined( _WIN32 ) && !defined( _NO_COM ) #undef INTERFACE #define INTERFACE IDirectDrawVideoAccelerator DECLARE_INTERFACE_( IDirectDrawVideoAccelerator, IUnknown ) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR * ppvObj) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; /*** IDirecytDrawVideoAccelerator methods ***/ STDMETHOD(BeginFrame)(THIS_ LPDDVABeginFrameInfo) PURE; STDMETHOD(EndFrame)(THIS_ LPDDVAEndFrameInfo) PURE; STDMETHOD(QueryRenderStatus)(THIS_ LPDIRECTDRAWSURFACE7, DWORD)PURE; STDMETHOD(Execute)(THIS_ DWORD, // Function LPVOID, // Input data DWORD, // Input data length LPVOID, // Output data DWORD, // Output data length DWORD, // Number of buffers LPDDVABUFFERINFO // Buffer info array ) PURE; }; // Flags for QueryRenderStatus #define DDVA_QUERYRENDERSTATUSF_READ 0x00000001 // Query for read // set this bit to 0 // if query for update #if !defined(__cplusplus) || defined(CINTERFACE) #define IVideoAccelerator_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IVideoAccelerator_AddRef(p) (p)->lpVtbl->AddRef(p) #define IVideoAccelerator_Release(p) (p)->lpVtbl->Release(p) #define IVideoAccelerator_BeginFrame(p,a) (p)->lpVtbl->BeginFrame(p,a) #define IVideoAccelerator_EndFrame(p,a) (p)->lpVtbl->EndFrame(p,a) #define IVideoAccelerator_QueryRenderStatus(p,a,b) (p)->lpVtbl->QueryRenderStatus(p,a,b) #define IVideoAccelerator_RenderMacroBlocks(p,a,b) (p)->lpVtbl->RenderMacroBlocks(p,a,b) #else #define IVideoAccelerator_QueryInterface(p,a,b) (p)->QueryInterface(a,b) #define IVideoAccelerator_AddRef(p) (p)->AddRef() #define IVideoAccelerator_Release(p) (p)->Release() #define IVideoAccelerator_BeginFrame(p,a) (p)->BeginFrame(a) #define IVideoAccelerator_EndFrame(p,a) (p)->EndFrame(a) #define IVideoAccelerator_QueryRenderStatus(p,a,b) (p)->QueryRenderStatus(a,b) #define IVideoAccelerator_RenderMacroBlocks(p,a,b) (p)->RenderMacroBlocks(a,b) #endif #endif #ifdef __cplusplus }; #endif #endif