From 64d2ce31a9435079dc80dd2a4899dffb97f1039b Mon Sep 17 00:00:00 2001 From: Johannes Anderwald Date: Tue, 5 May 2009 13:58:56 +0000 Subject: [PATCH] - Add IPortWaveRT, IPortWaveRTStream, IMiniportWaveRTStream, IMiniportWaveRTStreamNotification, IMiniportWaveRT interface - Add KSAUDIO_POSITION, KSRTAUDIO_HWLATENCY, KSRTAUDIO_HWREGISTER structure svn path=/trunk/; revision=40794 --- reactos/include/ddk/portcls.h | 229 +++++++++++++++++++++++++++++++++ reactos/include/psdk/ksmedia.h | 24 ++++ 2 files changed, 253 insertions(+) diff --git a/reactos/include/ddk/portcls.h b/reactos/include/ddk/portcls.h index 69451f2ccc1..b2ec6d7a171 100644 --- a/reactos/include/ddk/portcls.h +++ b/reactos/include/ddk/portcls.h @@ -1591,6 +1591,235 @@ DECLARE_INTERFACE_(IMiniportWavePci,IMiniport) typedef IMiniportWavePci *PMINIPORTWAVEPCI; + +#if !defined(DEFINE_ABSTRACT_MINIPORTWAVERTSTREAM) + +#define DEFINE_ABSTRACT_MINIPORTWAVERTSTREAM() \ + STDMETHOD_(NTSTATUS,SetFormat) \ + ( THIS_ \ + IN PKSDATAFORMAT DataFormat \ + ) PURE; \ + STDMETHOD_(NTSTATUS,SetState) \ + ( THIS_ \ + IN KSSTATE State \ + ) PURE; \ + STDMETHOD_(NTSTATUS,GetPosition) \ + ( THIS_ \ + OUT PKSAUDIO_POSITION Position \ + ) PURE; \ + STDMETHOD_(NTSTATUS,AllocateAudioBuffer) \ + ( THIS_ \ + IN ULONG RequestedSize, \ + OUT PMDL *AudioBufferMdl, \ + OUT ULONG *ActualSize, \ + OUT ULONG *OffsetFromFirstPage, \ + OUT MEMORY_CACHING_TYPE *CacheType \ + ) PURE; \ + STDMETHOD_(VOID,FreeAudioBuffer) \ + ( THIS_ \ + IN PMDL AudioBufferMdl, \ + IN ULONG BufferSize \ + ) PURE; \ + STDMETHOD_(VOID,GetHWLatency) \ + ( THIS_ \ + OUT KSRTAUDIO_HWLATENCY *hwLatency \ + ) PURE; \ + STDMETHOD_(NTSTATUS,GetPositionRegister) \ + ( THIS_ \ + OUT KSRTAUDIO_HWREGISTER *Register \ + ) PURE; \ + STDMETHOD_(NTSTATUS,GetClockRegister) \ + ( THIS_ \ + OUT KSRTAUDIO_HWREGISTER *Register \ + ) PURE; + +#endif + + +/* =============================================================== + IAdapterPowerManagement Interface +*/ + +#if (NTDDI_VERSION >= NTDDI_VISTA) +/* =============================================================== + IPortWaveRT Interface +*/ + +DEFINE_GUID(CLSID_PortWaveRT, 0xcc9be57a, 0xeb9e, 0x42b4, 0x94, 0xfc, 0xc, 0xad, 0x3d, 0xbc, 0xe7, 0xfa); +DEFINE_GUID(IID_IPortWaveRT, 0x339ff909, 0x68a9, 0x4310, 0xb0, 0x9b, 0x27, 0x4e, 0x96, 0xee, 0x4c, 0xbd); + +#undef INTERFACE +#define INTERFACE IPortWaveRT + +DECLARE_INTERFACE_(IPortWaveRT,IPort) +{ + DEFINE_ABSTRACT_UNKNOWN() // For IUnknown + + DEFINE_ABSTRACT_PORT() // For IPort +}; + +typedef IPortWaveRT *PPORTWAVERT; + + +/* =============================================================== + IPortWaveRTStream Interface +*/ + +#undef INTERFACE +#define INTERFACE IPortWaveRTStream + +DEFINE_GUID(IID_IPortWaveRTStream, 0x1809ce5a, 0x64bc, 0x4e62, 0xbd, 0x7d, 0x95, 0xbc, 0xe4, 0x3d, 0xe3, 0x93); + +DECLARE_INTERFACE_(IPortWaveRTStream, IUnknown) +{ + DEFINE_ABSTRACT_UNKNOWN() + + STDMETHOD_(PMDL, AllocatePagesForMdl) + ( THIS_ + IN PHYSICAL_ADDRESS HighAddress, + IN SIZE_T TotalBytes + ) PURE; + + STDMETHOD_(PMDL, AllocateContiguousPagesForMdl) + ( THIS_ + IN PHYSICAL_ADDRESS LowAddress, + IN PHYSICAL_ADDRESS HighAddress, + IN SIZE_T TotalBytes + ) PURE; + + STDMETHOD_(PVOID, MapAllocatedPages) + ( THIS_ + IN PMDL MemoryDescriptorList, + IN MEMORY_CACHING_TYPE CacheType + ) PURE; + + STDMETHOD_(VOID, UnmapAllocatedPages) + ( THIS_ + IN PVOID BaseAddress, + IN PMDL MemoryDescriptorList + ) PURE; + + STDMETHOD_(VOID, FreePagesFromMdl) + ( THIS_ + IN PMDL MemoryDescriptorList + ) PURE; + + STDMETHOD_(ULONG, GetPhysicalPagesCount) + ( THIS_ + IN PMDL MemoryDescriptorList + ) PURE; + + STDMETHOD_(PHYSICAL_ADDRESS, GetPhysicalPageAddress) + ( THIS_ + IN PMDL MemoryDescriptorList, + IN ULONG Index + ) PURE; +}; + +typedef IPortWaveRTStream *PPORTWAVERTSTREAM; + + +/* =============================================================== + IMiniportWaveRTStream Interface +*/ + +#undef INTERFACE +#define INTERFACE IMiniportWaveRTStream + +DEFINE_GUID(IID_IMiniportWaveRTStream, 0xac9ab, 0xfaab, 0x4f3d, 0x94, 0x55, 0x6f, 0xf8, 0x30, 0x6a, 0x74, 0xa0); + +DECLARE_INTERFACE_(IMiniportWaveRTStream, IUnknown) +{ + DEFINE_ABSTRACT_UNKNOWN() + DEFINE_ABSTRACT_MINIPORTWAVERTSTREAM() +}; + +typedef IMiniportWaveRTStream *PMINIPORTWAVERTSTREAM; + + +/* =============================================================== + IMiniportWaveRTStreamNotification Interface +*/ + +#undef INTERFACE +#define INTERFACE IMiniportWaveRTStreamNotification + +DEFINE_GUID(IID_IMiniportWaveRTStreamNotification, 0x23759128, 0x96f1, 0x423b, 0xab, 0x4d, 0x81, 0x63, 0x5b, 0xcf, 0x8c, 0xa1); + +DECLARE_INTERFACE_(IMiniportWaveRTStreamNotification, IMiniportWaveRTStream) +{ + DEFINE_ABSTRACT_UNKNOWN() + + DEFINE_ABSTRACT_MINIPORTWAVERTSTREAM() + + STDMETHOD_(NTSTATUS,AllocateBufferWithNotification) + ( THIS_ + IN ULONG NotificationCount, + IN ULONG RequestedSize, + OUT PMDL *AudioBufferMdl, + OUT ULONG *ActualSize, + OUT ULONG *OffsetFromFirstPage, + OUT MEMORY_CACHING_TYPE *CacheType + ) PURE; + + STDMETHOD_(VOID,FreeBufferWithNotification) + ( THIS_ + IN PMDL AudioBufferMdl, + IN ULONG BufferSize + ) PURE; + + STDMETHOD_(NTSTATUS,RegisterNotificationEvent) + ( THIS_ + IN PKEVENT NotificationEvent + ) PURE; + + STDMETHOD_(NTSTATUS,UnregisterNotificationEvent) + ( THIS_ + IN PKEVENT NotificationEvent + ) PURE; +}; + +/* =============================================================== + IMiniportWaveRT Interface +*/ + +#undef INTERFACE +#define INTERFACE IMiniportWaveRT + +DEFINE_GUID(IID_IMiniportWaveRT, 0xf9fc4d6, 0x6061, 0x4f3c, 0xb1, 0xfc, 0x7, 0x5e, 0x35, 0xf7, 0x96, 0xa); + +DECLARE_INTERFACE_(IMiniportWaveRT, IMiniport) +{ + DEFINE_ABSTRACT_UNKNOWN() + + DEFINE_ABSTRACT_MINIPORT() + + STDMETHOD_(NTSTATUS,Init) + ( THIS_ + IN PUNKNOWN UnknownAdapter, + IN PRESOURCELIST ResourceList, + IN PPORTWAVERT Port + ) PURE; + + STDMETHOD_(NTSTATUS,NewStream) + ( THIS_ + OUT PMINIPORTWAVERTSTREAM * Stream, + IN PPORTWAVERTSTREAM PortStream, + IN ULONG Pin, + IN BOOLEAN Capture, + IN PKSDATAFORMAT DataFormat + ) PURE; + + STDMETHOD_(NTSTATUS,GetDeviceDescription) + ( THIS_ + OUT PDEVICE_DESCRIPTION DeviceDescription + ) PURE; +}; + +typedef IMiniportWaveRT *PMINIPORTWAVERT; + +#endif + /* =============================================================== IAdapterPowerManagement Interface */ diff --git a/reactos/include/psdk/ksmedia.h b/reactos/include/psdk/ksmedia.h index d985789f8de..28973c71fe7 100644 --- a/reactos/include/psdk/ksmedia.h +++ b/reactos/include/psdk/ksmedia.h @@ -575,4 +575,28 @@ typedef struct ULONG Reserved; } KSNODEPROPERTY_AUDIO_CHANNEL, *PKSNODEPROPERTY_AUDIO_CHANNEL; +typedef struct { +#if defined(_NTDDK_) + ULONGLONG PlayOffset; + ULONGLONG WriteOffset; +#else + DWORDLONG PlayOffset; + DWORDLONG WriteOffset; +#endif +} KSAUDIO_POSITION, *PKSAUDIO_POSITION; + +typedef struct { + ULONG FifoSize; + ULONG ChipsetDelay; + ULONG CodecDelay; +} KSRTAUDIO_HWLATENCY, *PKSRTAUDIO_HWLATENCY; + +typedef struct { + PVOID Register; + ULONG Width; + ULONGLONG Numerator; + ULONGLONG Denominator; + ULONG Accuracy; +} KSRTAUDIO_HWREGISTER, *PKSRTAUDIO_HWREGISTER; + #endif