#if defined(__cplusplus) && _MSC_VER >= 1100
#define DEFINE_GUIDSTRUCT(guid, name) struct __declspec(uuid(guid)) name
- #define DEFINE_GUIDNAMED(name) __uidof(struct name)
+ #define DEFINE_GUIDNAMED(name) __uuidof(struct name)
#else
#define DEFINE_GUIDSTRUCT(guid, name) DEFINE_GUIDEX(name)
#define DEFINE_GUIDNAMED(name) name
#if 0
#define KSINTERFACESETID_Media
-#define KSINTERFACESETID_Standard
#define KSINTERFACE_STANDARD_STREAMING
#define KSINTERFACE_STANDARD_LOOPED_STREAMING
#define KSINTERFACE_STANDARD_CONTROL
#define KSINTERFACESETID_FileIo DEFINE_GUIDNAMED(KSINTERFACESETID_FileIo)
+
+
/* ===============================================================
Mediums
*/
Clock Properties/Methods/Events
*/
-#define KSPROPSETID_Clock \
+#define STATIC_KSPROPSETID_Clock \
0xDF12A4C0L, 0xAC17, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
+DEFINE_GUIDSTRUCT("DF12A4C0-AC17-11CF-A5D6-28DB04C10000", KSPROPSETID_Clock);
+#define KSPROPSETID_Clock DEFINE_GUIDNAMED(KSPROPSETID_Clock)
typedef enum
{
KSPROPERTY_CLOCK_TIME,
KSPROPERTY_CLOCK_PHYSICALTIME,
- KSPROPERTY_CORRELATEDTIME,
- KSPROPERTY_CORRELATEDPHYSICALTIME,
+ KSPROPERTY_CLOCK_CORRELATEDTIME,
+ KSPROPERTY_CLOCK_CORRELATEDPHYSICALTIME,
KSPROPERTY_CLOCK_RESOLUTION,
KSPROPERTY_CLOCK_STATE,
+#if defined(_NTDDK_)
KSPROPERTY_CLOCK_FUNCTIONTABLE
+#endif // defined(_NTDDK_)
} KSPROPERTY_CLOCK;
-#define KSEVENTSETID_Clock \
+#define STATIC_KSEVENTSETID_Clock \
0x364D8E20L, 0x62C7, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
+DEFINE_GUIDSTRUCT("364D8E20-62C7-11CF-A5D6-28DB04C10000", KSEVENTSETID_Clock);
+#define KSEVENTSETID_Clock DEFINE_GUIDNAMED(KSEVENTSETID_Clock)
typedef enum
{
KSPROPERTY_CONNECTION_STARTAT
} KSPROPERTY_CONNECTION;
-#define KSEVENTSETID_Connection \
- 0x7f4bcbe0L, 0x9ea5, 0x11cf, 0xa5, 0xd6, 0x28, 0xdb, 0x04, 0xc1, 0x00, 0x00
+#define DEFINE_KSPROPERTY_ITEM_CONNECTION_STATE(GetHandler, SetHandler)\
+ DEFINE_KSPROPERTY_ITEM(\
+ KSPROPERTY_CONNECTION_STATE,\
+ (GetHandler),\
+ sizeof(KSPROPERTY),\
+ sizeof(KSSTATE),\
+ (SetHandler),\
+ NULL, 0, NULL, NULL, 0)
+
+#define DEFINE_KSPROPERTY_ITEM_CONNECTION_PRIORITY(GetHandler, SetHandler)\
+ DEFINE_KSPROPERTY_ITEM(\
+ KSPROPERTY_CONNECTION_PRIORITY,\
+ (GetHandler),\
+ sizeof(KSPROPERTY),\
+ sizeof(KSPRIORITY),\
+ (SetHandler),\
+ NULL, 0, NULL, NULL, 0)
+
+#define DEFINE_KSPROPERTY_ITEM_CONNECTION_DATAFORMAT(GetHandler, SetHandler)\
+ DEFINE_KSPROPERTY_ITEM(\
+ KSPROPERTY_CONNECTION_DATAFORMAT,\
+ (GetHandler),\
+ sizeof(KSPROPERTY),\
+ 0,\
+ (SetHandler),\
+ NULL, 0, NULL, NULL, 0)
+
+#define DEFINE_KSPROPERTY_ITEM_CONNECTION_ALLOCATORFRAMING(Handler)\
+ DEFINE_KSPROPERTY_ITEM(\
+ KSPROPERTY_CONNECTION_ALLOCATORFRAMING,\
+ (Handler),\
+ sizeof(KSPROPERTY),\
+ sizeof(KSALLOCATOR_FRAMING),\
+ NULL, NULL, 0, NULL, NULL, 0)
+
+#define DEFINE_KSPROPERTY_ITEM_CONNECTION_ALLOCATORFRAMING_EX(Handler)\
+ DEFINE_KSPROPERTY_ITEM(\
+ KSPROPERTY_CONNECTION_ALLOCATORFRAMING_EX,\
+ (Handler),\
+ sizeof(KSPROPERTY),\
+ 0,\
+ NULL, NULL, 0, NULL, NULL, 0)
+
+#define DEFINE_KSPROPERTY_ITEM_CONNECTION_PROPOSEDATAFORMAT(Handler)\
+ DEFINE_KSPROPERTY_ITEM(\
+ KSPROPERTY_CONNECTION_PROPOSEDATAFORMAT,\
+ NULL,\
+ sizeof(KSPROPERTY),\
+ sizeof(KSDATAFORMAT),\
+ (Handler),\
+ NULL, 0, NULL, NULL, 0)
+
+#define DEFINE_KSPROPERTY_ITEM_CONNECTION_ACQUIREORDERING(Handler)\
+ DEFINE_KSPROPERTY_ITEM(\
+ KSPROPERTY_CONNECTION_ACQUIREORDERING,\
+ (Handler),\
+ sizeof(KSPROPERTY),\
+ sizeof(int),\
+ NULL, NULL, 0, NULL, NULL, 0)
+
+#define DEFINE_KSPROPERTY_ITEM_CONNECTION_STARTAT(Handler)\
+ DEFINE_KSPROPERTY_ITEM(\
+ KSPROPERTY_CONNECTION_STARTAT,\
+ NULL,\
+ sizeof(KSPROPERTY),\
+ sizeof(KSRELATIVEEVENT),\
+ (Handler),\
+ NULL, 0, NULL, NULL, 0)
+
typedef enum
{
Properties/Methods/Events
*/
-#define KSPROPSETID_MediaSeeking \
+#define STATIC_KSPROPSETID_MediaSeeking\
0xEE904F0CL, 0xD09B, 0x11D0, 0xAB, 0xE9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
+DEFINE_GUIDSTRUCT("EE904F0C-D09B-11D0-ABE9-00A0C9223196", KSPROPSETID_MediaSeeking);
+#define KSPROPSETID_MediaSeeking DEFINE_GUIDNAMED(KSPROPSETID_MediaSeeking)
-typedef enum
-{
+typedef enum {
KSPROPERTY_MEDIASEEKING_CAPABILITIES,
KSPROPERTY_MEDIASEEKING_FORMATS,
KSPROPERTY_MEDIASEEKING_TIMEFORMAT,
KSPROPERTY_MEDIASEEKING_CONVERTTIMEFORMAT
} KSPROPERTY_MEDIASEEKING;
+typedef enum {
+ KS_SEEKING_NoPositioning,
+ KS_SEEKING_AbsolutePositioning,
+ KS_SEEKING_RelativePositioning,
+ KS_SEEKING_IncrementalPositioning,
+ KS_SEEKING_PositioningBitsMask = 0x3,
+ KS_SEEKING_SeekToKeyFrame,
+ KS_SEEKING_ReturnTime = 0x8
+} KS_SEEKING_FLAGS;
+
+typedef enum {
+ KS_SEEKING_CanSeekAbsolute = 0x1,
+ KS_SEEKING_CanSeekForwards = 0x2,
+ KS_SEEKING_CanSeekBackwards = 0x4,
+ KS_SEEKING_CanGetCurrentPos = 0x8,
+ KS_SEEKING_CanGetStopPos = 0x10,
+ KS_SEEKING_CanGetDuration = 0x20,
+ KS_SEEKING_CanPlayBackwards = 0x40
+} KS_SEEKING_CAPABILITIES;
+
+typedef struct {
+ LONGLONG Current;
+ LONGLONG Stop;
+ KS_SEEKING_FLAGS CurrentFlags;
+ KS_SEEKING_FLAGS StopFlags;
+} KSPROPERTY_POSITIONS, *PKSPROPERTY_POSITIONS;
+
+typedef struct {
+ LONGLONG Earliest;
+ LONGLONG Latest;
+} KSPROPERTY_MEDIAAVAILABLE, *PKSPROPERTY_MEDIAAVAILABLE;
+
+typedef struct {
+ KSPROPERTY Property;
+ GUID SourceFormat;
+ GUID TargetFormat;
+ LONGLONG Time;
+} KSP_TIMEFORMAT, *PKSP_TIMEFORMAT;
+
+#define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_CAPABILITIES(Handler)\
+ DEFINE_KSPROPERTY_ITEM(\
+ KSPROPERTY_MEDIASEEKING_CAPABILITIES,\
+ (Handler),\
+ sizeof(KSPROPERTY),\
+ sizeof(KS_SEEKING_CAPABILITIES),\
+ NULL, NULL, 0, NULL, NULL, 0)
+
+#define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_FORMATS(Handler)\
+ DEFINE_KSPROPERTY_ITEM(\
+ KSPROPERTY_MEDIASEEKING_FORMATS,\
+ (Handler),\
+ sizeof(KSPROPERTY),\
+ 0,\
+ NULL, NULL, 0, NULL, NULL, 0)
+
+#define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_TIMEFORMAT(GetHandler, SetHandler)\
+ DEFINE_KSPROPERTY_ITEM(\
+ KSPROPERTY_MEDIASEEKING_TIMEFORMAT,\
+ (GetHandler),\
+ sizeof(KSPROPERTY),\
+ sizeof(GUID),\
+ (SetHandler),\
+ NULL, 0, NULL, NULL, 0)
+
+#define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_POSITION(Handler)\
+ DEFINE_KSPROPERTY_ITEM(\
+ KSPROPERTY_MEDIASEEKING_POSITION,\
+ (Handler),\
+ sizeof(KSPROPERTY),\
+ sizeof(LONGLONG),\
+ NULL, NULL, 0, NULL, NULL, 0)
+
+#define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_STOPPOSITION(Handler)\
+ DEFINE_KSPROPERTY_ITEM(\
+ KSPROPERTY_MEDIASEEKING_STOPPOSITION,\
+ (Handler),\
+ sizeof(KSPROPERTY),\
+ sizeof(LONGLONG),\
+ NULL, NULL, 0, NULL, NULL, 0)
+
+#define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_POSITIONS(Handler)\
+ DEFINE_KSPROPERTY_ITEM(\
+ KSPROPERTY_MEDIASEEKING_POSITIONS,\
+ NULL,\
+ sizeof(KSPROPERTY),\
+ sizeof(KSPROPERTY_POSITIONS),\
+ (Handler),\
+ NULL, 0, NULL, NULL, 0)
+
+#define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_DURATION(Handler)\
+ DEFINE_KSPROPERTY_ITEM(\
+ KSPROPERTY_MEDIASEEKING_DURATION,\
+ (Handler),\
+ sizeof(KSPROPERTY),\
+ sizeof(LONGLONG),\
+ NULL, NULL, 0, NULL, NULL, 0)
+
+#define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_AVAILABLE(Handler)\
+ DEFINE_KSPROPERTY_ITEM(\
+ KSPROPERTY_MEDIASEEKING_AVAILABLE,\
+ (Handler),\
+ sizeof(KSPROPERTY),\
+ sizeof(KSPROPERTY_MEDIAAVAILABLE),\
+ NULL, NULL, 0, NULL, NULL, 0)
+
+#define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_PREROLL(Handler)\
+ DEFINE_KSPROPERTY_ITEM(\
+ KSPROPERTY_MEDIASEEKING_PREROLL,\
+ (Handler),\
+ sizeof(KSPROPERTY),\
+ sizeof(LONGLONG),\
+ NULL, NULL, 0, NULL, NULL, 0)
+
+#define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_CONVERTTIMEFORMAT(Handler)\
+ DEFINE_KSPROPERTY_ITEM(\
+ KSPROPERTY_MEDIASEEKING_CONVERTTIMEFORMAT,\
+ (Handler),\
+ sizeof(KSP_TIMEFORMAT),\
+ sizeof(LONGLONG),\
+ NULL, NULL, 0, NULL, NULL, 0)
/* ===============================================================
Pin
DEFINE_GUIDSTRUCT("720D4AC0-7533-11D0-A5D6-28DB04C10000", KSPROPSETID_Topology);
#define KSPROPSETID_Topology DEFINE_GUIDNAMED(KSPROPSETID_Topology)
-typedef enum
-{
+typedef enum {
KSPROPERTY_TOPOLOGY_CATEGORIES,
+ KSPROPERTY_TOPOLOGY_NODES,
KSPROPERTY_TOPOLOGY_CONNECTIONS,
- KSPROPERTY_TOPOLOGY_NAME,
- KSPROPERTY_TOPOLOGY_NODES
+ KSPROPERTY_TOPOLOGY_NAME
} KSPROPERTY_TOPOLOGY;
-
-
/* ===============================================================
Property Sets for audio drivers - TODO
*/
#define STATIC_KSPROPTYPESETID_General \
- 0x97E99BA0L, 0xBDEA, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
+ 0x97E99BA0L, 0xBDEA, 0x11CF, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}
DEFINE_GUIDSTRUCT("97E99BA0-BDEA-11CF-A5D6-28DB04C10000", KSPROPTYPESETID_General);
#define KSPROPTYPESETID_General DEFINE_GUIDNAMED(KSPROPTYPESETID_General)
*/
-
-
-/* ===============================================================
- Event Sets for audio drivers - TODO
-*/
-#define KSEVENTSETID_AudioControlChange
-/*
- KSEVENT_CONTROL_CHANGE
-*/
-
-
-
/* ===============================================================
Node Types
*/
{
KSPIN_DATAFLOW_IN = 1,
KSPIN_DATAFLOW_OUT
-} KSPIN_DATAFLOW;
+} KSPIN_DATAFLOW, *PKSPIN_DATAFLOW;
typedef enum
{
KSPIN_COMMUNICATION_SOURCE,
KSPIN_COMMUNICATION_BOTH,
KSPIN_COMMUNICATION_BRIDGE
-} KSPIN_COMMUNICATION;
+} KSPIN_COMMUNICATION, *PKSPIN_COMMUNICATION;
typedef enum
{
#define KSPROPERTY_MEMBER_VALUES 0x00000003
#define KSPROPERTY_MEMBER_FLAG_DEFAULT KSPROPERTY_MEMBER_RANGES
-typedef enum {
- KS_SEEKING_NoPositioning,
- KS_SEEKING_AbsolutePositioning,
- KS_SEEKING_RelativePositioning,
- KS_SEEKING_IncrementalPositioning,
- KS_SEEKING_PositioningBitsMask = 0x3,
- KS_SEEKING_SeekToKeyFrame,
- KS_SEEKING_ReturnTime = 0x8
-} KS_SEEKING_FLAGS;
-
-typedef struct
-{
- LONGLONG Current;
- LONGLONG Stop;
- KS_SEEKING_FLAGS CurrentFlags;
- KS_SEEKING_FLAGS StopFlags;
-} KSPROPERTY_POSITIONS, *PKSPROPERTY_POSITIONS;
-
typedef struct
{
GUID PropertySet;
ULONG Reserved;
} KSPROPERTY_DESCRIPTION, *PKSPROPERTY_DESCRIPTION;
-typedef struct
-{
- LONGLONG Earliest;
- LONGLONG Latest;
-} KSPROPERTY_MEDIAAVAILABLE, *PKSPROPERTY_MEDIAAVAILABLE;
-
-
typedef struct
{
ULONG MembersFlags;
};
} KSEVENTDATA, *PKSEVENTDATA;
+#define KSEVENTF_EVENT_HANDLE 0x00000001
+#define KSEVENTF_SEMAPHORE_HANDLE 0x00000002
+#if defined(_NTDDK_)
+#define KSEVENTF_EVENT_OBJECT 0x00000004
+#define KSEVENTF_SEMAPHORE_OBJECT 0x00000008
+#define KSEVENTF_DPC 0x00000010
+#define KSEVENTF_WORKITEM 0x00000020
+#define KSEVENTF_KSWORKITEM 0x00000080
+#endif
+
+
+#define KSEVENT_TYPE_ENABLE 0x00000001
+#define KSEVENT_TYPE_ONESHOT 0x00000002
+#define KSEVENT_TYPE_ENABLEBUFFERED 0x00000004
+#define KSEVENT_TYPE_SETSUPPORT 0x00000100
+#define KSEVENT_TYPE_BASICSUPPORT 0x00000200
+#define KSEVENT_TYPE_QUERYBUFFER 0x00000400
+
+#define KSEVENT_TYPE_TOPOLOGY 0x10000000
+
typedef struct
{
ULONG Size;
KSEVENTDATA EventData;
} KSRELATIVEEVENT, *PKSRELATIVEEVENT;
+#define KSRELATIVEEVENT_FLAG_HANDLE 0x00000001
+#define KSRELATIVEEVENT_FLAG_POINTER 0x00000002
/* ===============================================================
Timing
*/
+
+typedef struct {
+ KSEVENTDATA EventData;
+ LONGLONG MarkTime;
+} KSEVENT_TIME_MARK, *PKSEVENT_TIME_MARK;
+
+typedef struct {
+ KSEVENTDATA EventData;
+ LONGLONG TimeBase;
+ LONGLONG Interval;
+} KSEVENT_TIME_INTERVAL, *PKSEVENT_TIME_INTERVAL;
+
+typedef struct {
+ LONGLONG TimeBase;
+ LONGLONG Interval;
+} KSINTERVAL, *PKSINTERVAL;
+
+
+
typedef struct
{
LONGLONG Time;
LONGLONG SystemTime;
} KSCORRELATED_TIME, *PKSCORRELATED_TIME;
-typedef struct
-{
- KSPROPERTY Property;
- GUID SourceFormat;
- GUID TargetFormat;
- LONGLONG Time;
-} KSP_TIMEFORMAT, *PKSP_TIMEFORMAT;
-
-typedef struct
-{
- LONGLONG TimeBase;
- LONGLONG Interval;
-} KSINTERVAL, *PKSINTERVAL;
-
typedef struct
{
LONGLONG Duration;
ULONG Flags;
} KSMETHOD_ITEM, *PKSMETHOD_ITEM;
+#ifndef _MSC_VER
+
+#define DEFINE_KSMETHOD_ITEM(MethodId, Flags,\
+ MethodHandler,\
+ MinMethod, MinData, SupportHandler)\
+{\
+ MethodId, {(PFNKSHANDLER)MethodHandler}, MinMethod, MinData,\
+ SupportHandler, Flags\
+}
+
+#else
+
+#define DEFINE_KSMETHOD_ITEM(MethodId, Flags,\
+ MethodHandler,\
+ MinMethod, MinData, SupportHandler)\
+{\
+ MethodId, (PFNKSHANDLER)MethodHandler, MinMethod, MinData,\
+ SupportHandler, Flags\
+}
+
+
+
+#endif
+
typedef struct
{
};
} KSFASTMETHOD_ITEM, *PKSFASTMETHOD_ITEM;
+#define DEFINE_KSFASTMETHOD_ITEM(MethodId, MethodHandler)\
+{\
+ MethodId, (PFNKSFASTHANDLER)MethodHandler\
+}
+
+
typedef struct
{
const GUID* Set;
const KSFASTMETHOD_ITEM*FastIoTable;
} KSMETHOD_SET, *PKSMETHOD_SET;
+
+#define DEFINE_KSMETHOD_SET(Set,\
+ MethodsCount,\
+ MethodItem,\
+ FastIoCount,\
+ FastIoTable)\
+{\
+ Set,\
+ MethodsCount,\
+ MethodItem,\
+ FastIoCount,\
+ FastIoTable\
+}
+
#endif
/* ===============================================================
Nodes
ULONG DataUsed;
PVOID Data;
ULONG OptionsFlags;
-#if _WIN64
+#ifdef _WIN64
ULONG Reserved;
#endif
} KSSTREAM_HEADER, *PKSSTREAM_HEADER;
/* ===============================================================
Event Functions
*/
+
#if defined(_NTDDK_)
#define KSPROBE_STREAMREAD 0x00000000
IN PKSPIN Pin
);
+#else
+
+#if !defined( KS_NO_CREATE_FUNCTIONS )
+
+KSDDKAPI
+DWORD
+WINAPI
+KsCreateAllocator(
+ IN HANDLE ConnectionHandle,
+ IN PKSALLOCATOR_FRAMING AllocatorFraming,
+ OUT PHANDLE AllocatorHandle
+ );
+
+KSDDKAPI
+DWORD
+NTAPI
+KsCreateClock(
+ IN HANDLE ConnectionHandle,
+ IN PKSCLOCK_CREATE ClockCreate,
+ OUT PHANDLE ClockHandle
+ );
+
+KSDDKAPI
+DWORD
+WINAPI
+KsCreatePin(
+ IN HANDLE FilterHandle,
+ IN PKSPIN_CONNECT Connect,
+ IN ACCESS_MASK DesiredAccess,
+ OUT PHANDLE ConnectionHandle
+ );
+
+KSDDKAPI
+DWORD
+WINAPI
+KsCreateTopologyNode(
+ IN HANDLE ParentHandle,
+ IN PKSNODE_CREATE NodeCreate,
+ IN ACCESS_MASK DesiredAccess,
+ OUT PHANDLE NodeHandle
+ );
+
+#endif
#endif
*/
#if defined(_NTDDK_)
+
+KSDDKAPI
+NTSTATUS
+NTAPI
+KsMergeAutomationTables(
+ OUT PKSAUTOMATION_TABLE* AutomationTableAB,
+ IN PKSAUTOMATION_TABLE AutomationTableA OPTIONAL,
+ IN PKSAUTOMATION_TABLE AutomationTableB OPTIONAL,
+ IN KSOBJECT_BAG Bag OPTIONAL
+ );
+
KSDDKAPI
NTSTATUS
NTAPI