diff options
Diffstat (limited to 'dxsdk/Include/DShowIDL/Videoacc.idl')
-rw-r--r-- | dxsdk/Include/DShowIDL/Videoacc.idl | 172 |
1 files changed, 172 insertions, 0 deletions
diff --git a/dxsdk/Include/DShowIDL/Videoacc.idl b/dxsdk/Include/DShowIDL/Videoacc.idl new file mode 100644 index 00000000..6c55aa73 --- /dev/null +++ b/dxsdk/Include/DShowIDL/Videoacc.idl @@ -0,0 +1,172 @@ +//------------------------------------------------------------------------------ +// File: VideoAcc.idl +// +// Desc: An interface exposed by the overlay mixer to help decode samples +// using hardware video acceleration. +// +// Copyright (c) 1992-2002, Microsoft Corporation. All rights reserved. +//------------------------------------------------------------------------------ + + +import "unknwn.idl"; + +cpp_quote("//") +cpp_quote("// The following declarations within the 'if 0' block are dummy typedefs used to make") +cpp_quote("// the motncomp.idl file build. The actual definitions are contained in ddraw.h and amva.h") +cpp_quote("//") +cpp_quote("#if 0") + +typedef void* LPVOID; +typedef void* LPGUID; +typedef void* LPDIRECTDRAWSURFACE; +typedef void* LPDDPIXELFORMAT; +typedef void* LPAMVAInternalMemInfo; +typedef void AMVAUncompDataInfo; +typedef void* LPAMVACompBufferInfo; +typedef void AMVABUFFERINFO; +typedef void AMVAEndFrameInfo; +typedef void* LPAMVAUncompBufferInfo; +typedef void AMVABeginFrameInfo; +typedef IUnknown* IMediaSample; + +cpp_quote("#endif") +cpp_quote("#include <ddraw.h>") +cpp_quote("#include <amva.h>") + + +[ + local, + object, + uuid(256A6A21-FBAD-11d1-82BF-00A0C9696C8F), + helpstring("IAMVideoAcceleratorNotify Interface"), + pointer_default(unique) +] + +// IAMVideoAcceleratorNotify +interface IAMVideoAcceleratorNotify : IUnknown +{ + // get information necessary to allocate uncompressed data buffers + // which is not part of the mediatype format (like how many buffers to allocate etc) + HRESULT GetUncompSurfacesInfo([in] const GUID *pGuid, [in] [out] LPAMVAUncompBufferInfo pUncompBufferInfo); + + // set information regarding allocated uncompressed data buffers + HRESULT SetUncompSurfacesInfo([in] DWORD dwActualUncompSurfacesAllocated); + + // get information necessary to create video accelerator object. It is the caller's responsibility + // to call CoTaskMemFree() on *ppMiscData + HRESULT GetCreateVideoAcceleratorData([in] const GUID *pGuid, [out] LPDWORD pdwSizeMiscData, [out] LPVOID *ppMiscData); +}; + +[ + local, + object, + uuid(256A6A22-FBAD-11d1-82BF-00A0C9696C8F), + helpstring("IAMVideoAccelerator Interface"), + pointer_default(unique) +] + +// IAMVideoAccelerator +interface IAMVideoAccelerator : IUnknown +{ + // pdwNumGuidsSupported is an IN OUT paramter + // pGuidsSupported is an IN OUT paramter + // if pGuidsSupported is NULL, pdwNumGuidsSupported should return back with the + // number of uncompressed pixel formats supported + // Otherwise pGuidsSupported is an array of *pdwNumGuidsSupported structures + HRESULT GetVideoAcceleratorGUIDs([in] [out] LPDWORD pdwNumGuidsSupported, [in] [out] LPGUID pGuidsSupported); + + // pGuid is an IN parameter + // pdwNumFormatsSupported is an IN OUT paramter + // pFormatsSupported is an IN OUT paramter (caller should make sure to set the size of EACH struct) + // if pFormatsSupported is NULL, pdwNumFormatsSupported should return back with + // the number of uncompressed pixel formats supported + // Otherwise pFormatsSupported is an array of *pdwNumFormatsSupported structures + HRESULT GetUncompFormatsSupported( [in] const GUID *pGuid, [in] [out] LPDWORD pdwNumFormatsSupported, + [in] [out] LPDDPIXELFORMAT pFormatsSupported); + + // pGuid is an IN parameter + // pamvaUncompDataInfo is an IN parameter + // pamvaInternalMemInfo is an IN OUT parameter (caller should make sure to set the size of struct) + // currently only gets info about how much scratch memory will the hal allocate for its private use + HRESULT GetInternalMemInfo([in] const GUID *pGuid, [in] const AMVAUncompDataInfo *pamvaUncompDataInfo, + [in] [out] LPAMVAInternalMemInfo pamvaInternalMemInfo); + + // pGuid is an IN parameter + // pamvaUncompDataInfo is an IN parameter + // pdwNumTypesCompBuffers is an IN OUT paramter + // pamvaCompBufferInfo is an IN OUT paramter (caller should make sure to set the size of EACH struct) + // if pamvaCompBufferInfo is NULL, pdwNumTypesCompBuffers should return back with the number of types of + // compressed buffers + // Otherwise pamvaCompBufferInfo is an array of *pdwNumTypesCompBuffers structures + HRESULT GetCompBufferInfo([in] const GUID *pGuid, [in] const AMVAUncompDataInfo *pamvaUncompDataInfo, + [in] [out] LPDWORD pdwNumTypesCompBuffers, [out] LPAMVACompBufferInfo pamvaCompBufferInfo); + + + // pdwNumTypesCompBuffers is an IN OUT paramter + // pamvaCompBufferInfo is an IN OUT paramter (caller should make sure to set the size of EACH struct) + // if pamvaCompBufferInfo is NULL, pdwNumTypesCompBuffers should return back with the number of types of + // compressed buffers + // Otherwise pamvaCompBufferInfo is an array of *pdwNumTypesCompBuffers structures + // only valid to call this after the pins are connected + HRESULT GetInternalCompBufferInfo([in] [out] LPDWORD pdwNumTypesCompBuffers, [out] LPAMVACompBufferInfo pamvaCompBufferInfo); + + // begin a frame, the pMiscData is passed directly to the hal + // only valid to call this after the pins are connected + // Tells the ovmixer which frame is the destination + // frame. Use indices (valid vales are [0 .. pdwNumSurfacesAllocated-1]) to specify frames + HRESULT BeginFrame([in] const AMVABeginFrameInfo *amvaBeginFrameInfo); + + // end a frame, the pMiscData is passed directly to the hal + // only valid to call this after the pins are connected + HRESULT EndFrame([in] const AMVAEndFrameInfo *pEndFrameInfo); + + // lock and obtain access to a single buffer + // only valid to call this after the pins are connected + // Buffers are identified by type and index within that type + // Specifiying read-only will allow access to busy reference + // frames + // Output (uncompressed) frames use a type index of 0xFFFFFFFF + HRESULT GetBuffer( + [in] DWORD dwTypeIndex, + [in] DWORD dwBufferIndex, + [in] BOOL bReadOnly, + [out] LPVOID *ppBuffer, + [out] LONG *lpStride); + + // unlock a single buffer + // Buffers are identified by type and index within that type + // only valid to call this after the pins are connected + HRESULT ReleaseBuffer([in] DWORD dwTypeIndex, [in] DWORD dwBufferIndex); + + // Perform a decompression operation + // Private data can be passed to and from a driver + // identifiers for the corresponding members of pamvaMacroBlockInfo + // pamvaMacroBlockInfo is an IN parameter which is array (of length dwNumBlocks) of structures + // only valid to call this after the pins are connected + HRESULT Execute( + [in] DWORD dwFunction, + [in] LPVOID lpPrivateInputData, + [in] DWORD cbPrivateInputData, + [in] LPVOID lpPrivateOutputDat, + [in] DWORD cbPrivateOutputData, + [in] DWORD dwNumBuffers, + [in] const AMVABUFFERINFO *pamvaBufferInfo); + + // query the decode status of a particular decompression operation + // dwTypeIndex and dwBufferIndex define the buffer whose status is + // being queried + HRESULT QueryRenderStatus([in] DWORD dwTypeIndex, + [in] DWORD dwBufferIndex, + [in] DWORD dwFlags); + + // display a frame. The mediasample contains the timestamps etc for the frame to be displayed + // this call is a non-blocking call + // only valid to call this after the pins are connected + HRESULT DisplayFrame([in] DWORD dwFlipToIndex, [in] IMediaSample *pMediaSample); +}; + + + + + + |