// Licensed under the Apache License, Version 2.0 // or the MIT license // , at your option. // All files in the project carrying such notice may not be copied, modified, or distributed // except according to those terms. use ctypes::c_void; use shared::d3d9::{IDirect3DDevice9Ex, IDirect3DSurface9}; use shared::d3d9types::{D3DCOLOR, D3DFORMAT, D3DPOOL}; use shared::guiddef::GUID; use shared::minwindef::{BOOL, DWORD, FLOAT, INT, UINT}; use shared::windef::{RECT, SIZE}; use um::unknwnbase::{IUnknown, IUnknownVtbl}; use um::winnt::{HANDLE, HRESULT, ULONGLONG}; DEFINE_GUID!{IID_IDXVAHD_Device, 0x95f12dfd, 0xd77e, 0x49be, 0x81, 0x5f, 0x57, 0xd5, 0x79, 0x63, 0x4d, 0x6d} DEFINE_GUID!{IID_IDXVAHD_VideoProcessor, 0x95f4edf4, 0x6e03, 0x4cd7, 0xbe, 0x1b, 0x30, 0x75, 0xd6, 0x65, 0xaa, 0x52} ENUM!{enum DXVAHD_FRAME_FORMAT { DXVAHD_FRAME_FORMAT_PROGRESSIVE = 0, DXVAHD_FRAME_FORMAT_INTERLACED_TOP_FIELD_FIRST = 1, DXVAHD_FRAME_FORMAT_INTERLACED_BOTTOM_FIELD_FIRST = 2, }} ENUM!{enum DXVAHD_DEVICE_USAGE { DXVAHD_DEVICE_USAGE_PLAYBACK_NORMAL = 0, DXVAHD_DEVICE_USAGE_OPTIMAL_SPEED = 1, DXVAHD_DEVICE_USAGE_OPTIMAL_QUALITY = 2, }} ENUM!{enum DXVAHD_SURFACE_TYPE { DXVAHD_SURFACE_TYPE_VIDEO_INPUT = 0, DXVAHD_SURFACE_TYPE_VIDEO_INPUT_PRIVATE = 1, DXVAHD_SURFACE_TYPE_VIDEO_OUTPUT = 2, }} ENUM!{enum DXVAHD_DEVICE_TYPE { DXVAHD_DEVICE_TYPE_HARDWARE = 0, DXVAHD_DEVICE_TYPE_SOFTWARE = 1, DXVAHD_DEVICE_TYPE_REFERENCE = 2, DXVAHD_DEVICE_TYPE_OTHER = 3, }} ENUM!{enum DXVAHD_DEVICE_CAPS { DXVAHD_DEVICE_CAPS_LINEAR_SPACE = 0x1, DXVAHD_DEVICE_CAPS_xvYCC = 0x2, DXVAHD_DEVICE_CAPS_RGB_RANGE_CONVERSION = 0x4, DXVAHD_DEVICE_CAPS_YCbCr_MATRIX_CONVERSION = 0x8, }} ENUM!{enum DXVAHD_FEATURE_CAPS { DXVAHD_FEATURE_CAPS_ALPHA_FILL = 0x1, DXVAHD_FEATURE_CAPS_CONSTRICTION = 0x2, DXVAHD_FEATURE_CAPS_LUMA_KEY = 0x4, DXVAHD_FEATURE_CAPS_ALPHA_PALETTE = 0x8, }} ENUM!{enum DXVAHD_FILTER_CAPS { DXVAHD_FILTER_CAPS_BRIGHTNESS = 0x1, DXVAHD_FILTER_CAPS_CONTRAST = 0x2, DXVAHD_FILTER_CAPS_HUE = 0x4, DXVAHD_FILTER_CAPS_SATURATION = 0x8, DXVAHD_FILTER_CAPS_NOISE_REDUCTION = 0x10, DXVAHD_FILTER_CAPS_EDGE_ENHANCEMENT = 0x20, DXVAHD_FILTER_CAPS_ANAMORPHIC_SCALING = 0x40, }} ENUM!{enum DXVAHD_INPUT_FORMAT_CAPS { DXVAHD_INPUT_FORMAT_CAPS_RGB_INTERLACED = 0x1, DXVAHD_INPUT_FORMAT_CAPS_RGB_PROCAMP = 0x2, DXVAHD_INPUT_FORMAT_CAPS_RGB_LUMA_KEY = 0x4, DXVAHD_INPUT_FORMAT_CAPS_PALETTE_INTERLACED = 0x8, }} ENUM!{enum DXVAHD_PROCESSOR_CAPS { DXVAHD_PROCESSOR_CAPS_DEINTERLACE_BLEND = 0x1, DXVAHD_PROCESSOR_CAPS_DEINTERLACE_BOB = 0x2, DXVAHD_PROCESSOR_CAPS_DEINTERLACE_ADAPTIVE = 0x4, DXVAHD_PROCESSOR_CAPS_DEINTERLACE_MOTION_COMPENSATION = 0x8, DXVAHD_PROCESSOR_CAPS_INVERSE_TELECINE = 0x10, DXVAHD_PROCESSOR_CAPS_FRAME_RATE_CONVERSION = 0x20, }} ENUM!{enum DXVAHD_ITELECINE_CAPS { DXVAHD_ITELECINE_CAPS_32 = 0x1, DXVAHD_ITELECINE_CAPS_22 = 0x2, DXVAHD_ITELECINE_CAPS_2224 = 0x4, DXVAHD_ITELECINE_CAPS_2332 = 0x8, DXVAHD_ITELECINE_CAPS_32322 = 0x10, DXVAHD_ITELECINE_CAPS_55 = 0x20, DXVAHD_ITELECINE_CAPS_64 = 0x40, DXVAHD_ITELECINE_CAPS_87 = 0x80, DXVAHD_ITELECINE_CAPS_222222222223 = 0x100, DXVAHD_ITELECINE_CAPS_OTHER = 0x80000000, }} ENUM!{enum DXVAHD_FILTER { DXVAHD_FILTER_BRIGHTNESS = 0, DXVAHD_FILTER_CONTRAST = 1, DXVAHD_FILTER_HUE = 2, DXVAHD_FILTER_SATURATION = 3, DXVAHD_FILTER_NOISE_REDUCTION = 4, DXVAHD_FILTER_EDGE_ENHANCEMENT = 5, DXVAHD_FILTER_ANAMORPHIC_SCALING = 6, }} ENUM!{enum DXVAHD_BLT_STATE { DXVAHD_BLT_STATE_TARGET_RECT = 0, DXVAHD_BLT_STATE_BACKGROUND_COLOR = 1, DXVAHD_BLT_STATE_OUTPUT_COLOR_SPACE = 2, DXVAHD_BLT_STATE_ALPHA_FILL = 3, DXVAHD_BLT_STATE_CONSTRICTION = 4, DXVAHD_BLT_STATE_PRIVATE = 1000, }} ENUM!{enum DXVAHD_ALPHA_FILL_MODE { DXVAHD_ALPHA_FILL_MODE_OPAQUE = 0, DXVAHD_ALPHA_FILL_MODE_BACKGROUND = 1, DXVAHD_ALPHA_FILL_MODE_DESTINATION = 2, DXVAHD_ALPHA_FILL_MODE_SOURCE_STREAM = 3, }} ENUM!{enum DXVAHD_STREAM_STATE { DXVAHD_STREAM_STATE_D3DFORMAT = 0, DXVAHD_STREAM_STATE_FRAME_FORMAT = 1, DXVAHD_STREAM_STATE_INPUT_COLOR_SPACE = 2, DXVAHD_STREAM_STATE_OUTPUT_RATE = 3, DXVAHD_STREAM_STATE_SOURCE_RECT = 4, DXVAHD_STREAM_STATE_DESTINATION_RECT = 5, DXVAHD_STREAM_STATE_ALPHA = 6, DXVAHD_STREAM_STATE_PALETTE = 7, DXVAHD_STREAM_STATE_LUMA_KEY = 8, DXVAHD_STREAM_STATE_ASPECT_RATIO = 9, DXVAHD_STREAM_STATE_FILTER_BRIGHTNESS = 100, DXVAHD_STREAM_STATE_FILTER_CONTRAST = 101, DXVAHD_STREAM_STATE_FILTER_HUE = 102, DXVAHD_STREAM_STATE_FILTER_SATURATION = 103, DXVAHD_STREAM_STATE_FILTER_NOISE_REDUCTION = 104, DXVAHD_STREAM_STATE_FILTER_EDGE_ENHANCEMENT = 105, DXVAHD_STREAM_STATE_FILTER_ANAMORPHIC_SCALING = 106, DXVAHD_STREAM_STATE_PRIVATE = 1000, }} ENUM!{enum DXVAHD_OUTPUT_RATE { DXVAHD_OUTPUT_RATE_NORMAL = 0, DXVAHD_OUTPUT_RATE_HALF = 1, DXVAHD_OUTPUT_RATE_CUSTOM = 2, }} STRUCT!{struct DXVAHD_RATIONAL { Numerator: UINT, Denominator: UINT, }} STRUCT!{struct DXVAHD_COLOR_RGBA { R: FLOAT, G: FLOAT, B: FLOAT, A: FLOAT, }} STRUCT!{struct DXVAHD_COLOR_YCbCrA { Y: FLOAT, Cb: FLOAT, Cr: FLOAT, A: FLOAT, }} UNION!{union DXVAHD_COLOR { [u32; 4], RGB RGB_mut: DXVAHD_COLOR_RGBA, YCbCr YCbCr_mut: DXVAHD_COLOR_YCbCrA, }} STRUCT!{struct DXVAHD_CONTENT_DESC { InputFrameFormat: DXVAHD_FRAME_FORMAT, InputFrameRate: DXVAHD_RATIONAL, InputWidth: UINT, InputHeight: UINT, OutputFrameRate: DXVAHD_RATIONAL, OutputWidth: UINT, OutputHeight: UINT, }} STRUCT!{struct DXVAHD_VPDEVCAPS { DeviceType: DXVAHD_DEVICE_TYPE, DeviceCaps: UINT, FeatureCaps: UINT, FilterCaps: UINT, InputFormatCaps: UINT, InputPool: D3DPOOL, OutputFormatCount: UINT, InputFormatCount: UINT, VideoProcessorCount: UINT, MaxInputStreams: UINT, MaxStreamStates: UINT, }} STRUCT!{struct DXVAHD_VPCAPS { VPGuid: GUID, PastFrames: UINT, FutureFrames: UINT, ProcessorCaps: UINT, ITelecineCaps: UINT, CustomRateCount: UINT, }} STRUCT!{struct DXVAHD_CUSTOM_RATE_DATA { CustomRate: DXVAHD_RATIONAL, OutputFrames: UINT, InputInterlaced: BOOL, InputFramesOrFields: UINT, }} STRUCT!{struct DXVAHD_FILTER_RANGE_DATA { Minimum: INT, Maximum: INT, Default: INT, Multiplier: FLOAT, }} STRUCT!{struct DXVAHD_BLT_STATE_TARGET_RECT_DATA { Enable: BOOL, TargetRect: RECT, }} STRUCT!{struct DXVAHD_BLT_STATE_BACKGROUND_COLOR_DATA { YCbCr: BOOL, BackgroundColor: DXVAHD_COLOR, }} STRUCT!{struct DXVAHD_BLT_STATE_OUTPUT_COLOR_SPACE_DATA { Value: UINT, }} BITFIELD!{DXVAHD_BLT_STATE_OUTPUT_COLOR_SPACE_DATA Value: UINT [ Usage set_Usage[0..1], RGB_Range set_RGB_Range[1..2], YCbCr_Matrix set_YCbCr_Matrix[2..3], YCbCr_xvYCC set_YCbCr_xvYCC[3..4], Reserved set_Reserved[4..32], ]} STRUCT!{struct DXVAHD_BLT_STATE_ALPHA_FILL_DATA { Mode: DXVAHD_ALPHA_FILL_MODE, StreamNumber: UINT, }} STRUCT!{struct DXVAHD_BLT_STATE_CONSTRICTION_DATA { Enable: BOOL, Size: SIZE, }} STRUCT!{struct DXVAHD_BLT_STATE_PRIVATE_DATA { Guid: GUID, DataSize: UINT, pData: *mut c_void, }} STRUCT!{struct DXVAHD_STREAM_STATE_D3DFORMAT_DATA { Format: D3DFORMAT, }} STRUCT!{struct DXVAHD_STREAM_STATE_FRAME_FORMAT_DATA { FrameFormat: DXVAHD_FRAME_FORMAT, }} STRUCT!{struct DXVAHD_STREAM_STATE_INPUT_COLOR_SPACE_DATA { Value: UINT, }} BITFIELD!{DXVAHD_STREAM_STATE_INPUT_COLOR_SPACE_DATA Value: UINT [ Type set_Type[0..1], RGB_Range set_RGB_Range[1..2], YCbCr_Matrix set_YCbCr_Matrix[2..3], YCbCr_xvYCC set_YCbCr_xvYCC[3..4], Reserved set_Reserved[4..32], ]} STRUCT!{struct DXVAHD_STREAM_STATE_OUTPUT_RATE_DATA { RepeatFrame: BOOL, OutputRate: DXVAHD_OUTPUT_RATE, CustomRate: DXVAHD_RATIONAL, }} STRUCT!{struct DXVAHD_STREAM_STATE_SOURCE_RECT_DATA { Enable: BOOL, SourceRect: RECT, }} STRUCT!{struct DXVAHD_STREAM_STATE_DESTINATION_RECT_DATA { Enable: BOOL, DestinationRect: RECT, }} STRUCT!{struct DXVAHD_STREAM_STATE_ALPHA_DATA { Enable: BOOL, Alpha: FLOAT, }} STRUCT!{struct DXVAHD_STREAM_STATE_PALETTE_DATA { Count: UINT, pEntries: *mut D3DCOLOR, }} STRUCT!{struct DXVAHD_STREAM_STATE_LUMA_KEY_DATA { Enable: BOOL, Lower: FLOAT, Upper: FLOAT, }} STRUCT!{struct DXVAHD_STREAM_STATE_ASPECT_RATIO_DATA { Enable: BOOL, SourceAspectRatio: DXVAHD_RATIONAL, DestinationAspectRatio: DXVAHD_RATIONAL, }} STRUCT!{struct DXVAHD_STREAM_STATE_FILTER_DATA { Enable: BOOL, Level: INT, }} STRUCT!{struct DXVAHD_STREAM_STATE_PRIVATE_DATA { Guid: GUID, DataSize: UINT, pData: *mut c_void, }} STRUCT!{struct DXVAHD_STREAM_DATA { Enable: BOOL, OutputIndex: UINT, InputFrameOrField: UINT, PastFrames: UINT, FutureFrames: UINT, ppPastSurfaces: *mut *mut IDirect3DSurface9, pInputSurface: *mut IDirect3DSurface9, ppFutureSurfaces: *mut *mut IDirect3DSurface9, }} STRUCT!{struct DXVAHD_STREAM_STATE_PRIVATE_IVTC_DATA { Enable: BOOL, ITelecineFlags: UINT, Frames: UINT, InputField: UINT, }} RIDL!{#[uuid(0x95f12dfd, 0xd77e, 0x49be, 0x81, 0x5f, 0x57, 0xd5, 0x79, 0x63, 0x4d, 0x6d)] interface IDXVAHD_Device(IDXVAHD_DeviceVtbl): IUnknown(IUnknownVtbl) { fn CreateVideoSurface( Width: UINT, Height: UINT, Format: D3DFORMAT, Pool: D3DPOOL, Usage: DWORD, Type: DXVAHD_SURFACE_TYPE, NumSurfaces: UINT, ppSurfaces: *mut *mut IDirect3DSurface9, pSharedHandle: *mut HANDLE, ) -> HRESULT, fn GetVideoProcessorDeviceCaps( pCaps: *mut DXVAHD_VPDEVCAPS, ) -> HRESULT, fn GetVideoProcessorOutputFormats( Count: UINT, pFormats: *mut D3DFORMAT, ) -> HRESULT, fn GetVideoProcessorInputFormats( Count: UINT, pFormats: *mut D3DFORMAT, ) -> HRESULT, fn GetVideoProcessorCaps( Count: UINT, pCaps: *mut DXVAHD_VPCAPS, ) -> HRESULT, fn GetVideoProcessorCustomRates( pVPGuid: *const GUID, Count: UINT, pRates: *mut DXVAHD_CUSTOM_RATE_DATA, ) -> HRESULT, fn GetVideoProcessorFilterRange( Filter: DXVAHD_FILTER, pRange: *mut DXVAHD_FILTER_RANGE_DATA, ) -> HRESULT, fn CreateVideoProcessor( pVPGuid: *const GUID, ppVideoProcessor: *mut *mut IDXVAHD_VideoProcessor, ) -> HRESULT, }} RIDL!{#[uuid(0x95f4edf4, 0x6e03, 0x4cd7, 0xbe, 0x1b, 0x30, 0x75, 0xd6, 0x65, 0xaa, 0x52)] interface IDXVAHD_VideoProcessor(IDXVAHD_VideoProcessorVtbl): IUnknown(IUnknownVtbl) { fn SetVideoProcessBltState( State: DXVAHD_BLT_STATE, DataSize: UINT, pData: *const c_void, ) -> HRESULT, fn GetVideoProcessBltState( State: DXVAHD_BLT_STATE, DataSize: UINT, pData: *mut c_void, ) -> HRESULT, fn SetVideoProcessStreamState( StreamNumber: UINT, State: DXVAHD_STREAM_STATE, DataSize: UINT, pData: *const c_void, ) -> HRESULT, fn GetVideoProcessStreamState( StreamNumber: UINT, State: DXVAHD_STREAM_STATE, DataSize: UINT, pData: *mut c_void, ) -> HRESULT, fn VideoProcessBltHD( pOutputSurface: *mut IDirect3DSurface9, OutputFrame: UINT, StreamCount: UINT, pStreams: *const DXVAHD_STREAM_DATA, ) -> HRESULT, }} FN!{stdcall PDXVAHDSW_CreateDevice( pD3DDevice: *mut IDirect3DDevice9Ex, phDevice: *mut HANDLE, ) -> HRESULT} FN!{stdcall PDXVAHDSW_ProposeVideoPrivateFormat( hDevice: HANDLE, pFormat: *mut D3DFORMAT, ) -> HRESULT} FN!{stdcall PDXVAHDSW_GetVideoProcessorDeviceCaps( hDevice: HANDLE, pContentDesc: *const DXVAHD_CONTENT_DESC, Usage: DXVAHD_DEVICE_USAGE, pCaps: *mut DXVAHD_VPDEVCAPS, ) -> HRESULT} FN!{stdcall PDXVAHDSW_GetVideoProcessorOutputFormats( hDevice: HANDLE, pContentDesc: *const DXVAHD_CONTENT_DESC, Usage: DXVAHD_DEVICE_USAGE, Count: UINT, pFormats: *mut D3DFORMAT, ) -> HRESULT} FN!{stdcall PDXVAHDSW_GetVideoProcessorInputFormats( hDevice: HANDLE, pContentDesc: *const DXVAHD_CONTENT_DESC, Usage: DXVAHD_DEVICE_USAGE, Count: UINT, pFormats: *mut D3DFORMAT, ) -> HRESULT} FN!{stdcall PDXVAHDSW_GetVideoProcessorCaps( hDevice: HANDLE, pContentDesc: *const DXVAHD_CONTENT_DESC, Usage: DXVAHD_DEVICE_USAGE, Count: UINT, pCaps: *mut DXVAHD_VPCAPS, ) -> HRESULT} FN!{stdcall PDXVAHDSW_GetVideoProcessorCustomRates( hDevice: HANDLE, pVPGuid: *const GUID, Count: UINT, pRates: *mut DXVAHD_CUSTOM_RATE_DATA, ) -> HRESULT} FN!{stdcall PDXVAHDSW_GetVideoProcessorFilterRange( hDevice: HANDLE, Filter: DXVAHD_FILTER, pRange: *mut DXVAHD_FILTER_RANGE_DATA, ) -> HRESULT} FN!{stdcall PDXVAHDSW_DestroyDevice( hDevice: HANDLE, ) -> HRESULT} FN!{stdcall PDXVAHDSW_CreateVideoProcessor( hDevice: HANDLE, pVPGuid: *const GUID, phVideoProcessor: *mut HANDLE, ) -> HRESULT} FN!{stdcall PDXVAHDSW_SetVideoProcessBltState( hVideoProcessor: HANDLE, State: DXVAHD_BLT_STATE, DataSize: UINT, pData: *const c_void, ) -> HRESULT} FN!{stdcall PDXVAHDSW_GetVideoProcessBltStatePrivate( hVideoProcessor: HANDLE, pData: *mut DXVAHD_BLT_STATE_PRIVATE_DATA, ) -> HRESULT} FN!{stdcall PDXVAHDSW_SetVideoProcessStreamState( hVideoProcessor: HANDLE, StreamNumber: UINT, State: DXVAHD_STREAM_STATE, DataSize: UINT, pData: *const c_void, ) -> HRESULT} FN!{stdcall PDXVAHDSW_GetVideoProcessStreamStatePrivate( hVideoProcessor: HANDLE, StreamNumber: UINT, pData: *mut DXVAHD_STREAM_STATE_PRIVATE_DATA, ) -> HRESULT} FN!{stdcall PDXVAHDSW_VideoProcessBltHD( hVideoProcessor: HANDLE, pOutputSurface: *mut IDirect3DSurface9, OutputFrame: UINT, StreamCount: UINT, pStreams: *const DXVAHD_STREAM_DATA, ) -> HRESULT} FN!{stdcall PDXVAHDSW_DestroyVideoProcessor( hVideoProcessor: HANDLE, ) -> HRESULT} STRUCT!{struct DXVAHDSW_CALLBACKS { CreateDevice: PDXVAHDSW_CreateDevice, ProposeVideoPrivateFormat: PDXVAHDSW_ProposeVideoPrivateFormat, GetVideoProcessorDeviceCaps: PDXVAHDSW_GetVideoProcessorDeviceCaps, GetVideoProcessorOutputFormats: PDXVAHDSW_GetVideoProcessorOutputFormats, GetVideoProcessorInputFormats: PDXVAHDSW_GetVideoProcessorInputFormats, GetVideoProcessorCaps: PDXVAHDSW_GetVideoProcessorCaps, GetVideoProcessorCustomRates: PDXVAHDSW_GetVideoProcessorCustomRates, GetVideoProcessorFilterRange: PDXVAHDSW_GetVideoProcessorFilterRange, DestroyDevice: PDXVAHDSW_DestroyDevice, CreateVideoProcessor: PDXVAHDSW_CreateVideoProcessor, SetVideoProcessBltState: PDXVAHDSW_SetVideoProcessBltState, GetVideoProcessBltStatePrivate: PDXVAHDSW_GetVideoProcessBltStatePrivate, SetVideoProcessStreamState: PDXVAHDSW_SetVideoProcessStreamState, GetVideoProcessStreamStatePrivate: PDXVAHDSW_GetVideoProcessStreamStatePrivate, VideoProcessBltHD: PDXVAHDSW_VideoProcessBltHD, DestroyVideoProcessor: PDXVAHDSW_DestroyVideoProcessor, }} FN!{stdcall PDXVAHDSW_Plugin( Size: UINT, pCallbacks: *mut c_void, ) -> HRESULT} DEFINE_GUID!{DXVAHDControlGuid, 0xa0386e75, 0xf70c, 0x464c, 0xa9, 0xce, 0x33, 0xc4, 0x4e, 0x09, 0x16, 0x23} DEFINE_GUID!{DXVAHDETWGUID_CREATEVIDEOPROCESSOR, 0x681e3d1e, 0x5674, 0x4fb3, 0xa5, 0x03, 0x2f, 0x20, 0x55, 0xe9, 0x1f, 0x60} DEFINE_GUID!{DXVAHDETWGUID_VIDEOPROCESSBLTSTATE, 0x76c94b5a, 0x193f, 0x4692, 0x94, 0x84, 0xa4, 0xd9, 0x99, 0xda, 0x81, 0xa8} DEFINE_GUID!{DXVAHDETWGUID_VIDEOPROCESSSTREAMSTATE, 0x262c0b02, 0x209d, 0x47ed, 0x94, 0xd8, 0x82, 0xae, 0x02, 0xb8, 0x4a, 0xa7} DEFINE_GUID!{DXVAHDETWGUID_VIDEOPROCESSBLTHD, 0xbef3d435, 0x78c7, 0x4de3, 0x97, 0x07, 0xcd, 0x1b, 0x08, 0x3b, 0x16, 0x0a} DEFINE_GUID!{DXVAHDETWGUID_VIDEOPROCESSBLTHD_STREAM, 0x27ae473e, 0xa5fc, 0x4be5, 0xb4, 0xe3, 0xf2, 0x49, 0x94, 0xd3, 0xc4, 0x95} DEFINE_GUID!{DXVAHDETWGUID_DESTROYVIDEOPROCESSOR, 0xf943f0a0, 0x3f16, 0x43e0, 0x80, 0x93, 0x10, 0x5a, 0x98, 0x6a, 0xa5, 0xf1} STRUCT!{struct DXVAHDETW_CREATEVIDEOPROCESSOR { pObject: ULONGLONG, pD3D9Ex: ULONGLONG, VPGuid: GUID, }} STRUCT!{struct DXVAHDETW_VIDEOPROCESSBLTSTATE { pObject: ULONGLONG, State: DXVAHD_BLT_STATE, DataSize: UINT, SetState: BOOL, }} STRUCT!{struct DXVAHDETW_VIDEOPROCESSSTREAMSTATE { pObject: ULONGLONG, StreamNumber: UINT, State: DXVAHD_STREAM_STATE, DataSize: UINT, SetState: BOOL, }} STRUCT!{struct DXVAHDETW_VIDEOPROCESSBLTHD { pObject: ULONGLONG, pOutputSurface: ULONGLONG, TargetRect: RECT, OutputFormat: D3DFORMAT, ColorSpace: UINT, OutputFrame: UINT, StreamCount: UINT, Enter: BOOL, }} STRUCT!{struct DXVAHDETW_VIDEOPROCESSBLTHD_STREAM { pObject: ULONGLONG, pInputSurface: ULONGLONG, SourceRect: RECT, DestinationRect: RECT, InputFormat: D3DFORMAT, FrameFormat: DXVAHD_FRAME_FORMAT, ColorSpace: UINT, StreamNumber: UINT, OutputIndex: UINT, InputFrameOrField: UINT, PastFrames: UINT, FutureFrames: UINT, }} STRUCT!{struct DXVAHDETW_DESTROYVIDEOPROCESSOR { pObject: ULONGLONG, }} extern "system" { pub fn DXVAHD_CreateDevice( pD3DDevice: *mut IDirect3DDevice9Ex, pContentDesc: *const DXVAHD_CONTENT_DESC, Usage: DXVAHD_DEVICE_USAGE, pPlugin: PDXVAHDSW_Plugin, ppDevice: *mut *mut IDXVAHD_Device, ) -> HRESULT; } FN!{stdcall PDXVAHD_CreateDevice( pD3DDevice: *mut IDirect3DDevice9Ex, pContentDesc: *const DXVAHD_CONTENT_DESC, Usage: DXVAHD_DEVICE_USAGE, pPlugin: PDXVAHDSW_Plugin, ppDevice: *mut *mut IDXVAHD_Device, ) -> HRESULT}