📄 ks.h
字号:
} SemaphoreObject;
struct {
PKDPC Dpc;
ULONG ReferenceCount;
ULONG_PTR Reserved;
} Dpc;
struct {
PWORK_QUEUE_ITEM WorkQueueItem;
WORK_QUEUE_TYPE WorkQueueType;
ULONG_PTR Reserved;
} WorkItem;
struct {
PWORK_QUEUE_ITEM WorkQueueItem;
PKSWORKER KsWorkerObject;
ULONG_PTR Reserved;
} KsWorkItem;
// @@BEGIN_DDKSPLIT
struct {
PKSFILTER Filter;
ULONG_PTR Reserved[2];
} KsFilterProcessing;
struct {
PKSPIN Pin;
ULONG_PTR Reserved[2];
} KsPinProcessing;
// @@END_DDKSPLIT
#endif // defined(_NTDDK_)
struct {
PVOID Unused;
LONG_PTR Alignment[2];
} Alignment;
};
} 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
// @@BEGIN_DDKSPLIT
#define KSEVENTF_KSFILTERPROCESSING 0x00000100
#define KSEVENTF_KSPINPROCESSING 0x00000200
// @@END_DDKSPLIT
#endif // defined(_NTDDK_)
#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 {
KSEVENT Event;
PKSEVENTDATA EventData;
PVOID Reserved;
} KSQUERYBUFFER, *PKSQUERYBUFFER;
typedef struct {
ULONG Size;
ULONG Flags;
union {
HANDLE ObjectHandle;
PVOID ObjectPointer;
};
PVOID Reserved;
KSEVENT Event;
KSEVENTDATA EventData;
} KSRELATIVEEVENT;
#define KSRELATIVEEVENT_FLAG_HANDLE 0x00000001
#define KSRELATIVEEVENT_FLAG_POINTER 0x00000002
//===========================================================================
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;
//===========================================================================
#define STATIC_KSPROPSETID_General\
0x1464EDA5L, 0x6A8F, 0x11D1, 0x9A, 0xA7, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
DEFINE_GUIDSTRUCT("1464EDA5-6A8F-11D1-9AA7-00A0C9223196", KSPROPSETID_General);
#define KSPROPSETID_General DEFINE_GUIDNAMED(KSPROPSETID_General)
typedef enum {
KSPROPERTY_GENERAL_COMPONENTID
} KSPROPERTY_GENERAL;
typedef struct {
GUID Manufacturer;
GUID Product;
GUID Component;
GUID Name;
ULONG Version;
ULONG Revision;
} KSCOMPONENTID, *PKSCOMPONENTID;
#define DEFINE_KSPROPERTY_ITEM_GENERAL_COMPONENTID(Handler)\
DEFINE_KSPROPERTY_ITEM(\
KSPROPERTY_GENERAL_COMPONENTID,\
(Handler),\
sizeof(KSPROPERTY),\
sizeof(KSCOMPONENTID),\
NULL, NULL, 0, NULL, NULL, 0)
#define STATIC_KSMETHODSETID_StreamIo\
0x65D003CAL, 0x1523, 0x11D2, 0xB2, 0x7A, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
DEFINE_GUIDSTRUCT("65D003CA-1523-11D2-B27A-00A0C9223196", KSMETHODSETID_StreamIo);
#define KSMETHODSETID_StreamIo DEFINE_GUIDNAMED(KSMETHODSETID_StreamIo)
typedef enum {
KSMETHOD_STREAMIO_READ,
KSMETHOD_STREAMIO_WRITE
} KSMETHOD_STREAMIO;
#define DEFINE_KSMETHOD_ITEM_STREAMIO_READ(Handler)\
DEFINE_KSMETHOD_ITEM(\
KSMETHOD_STREAMIO_READ,\
KSMETHOD_TYPE_WRITE,\
(Handler),\
sizeof(KSMETHOD),\
0,\
NULL)
#define DEFINE_KSMETHOD_ITEM_STREAMIO_WRITE(Handler)\
DEFINE_KSMETHOD_ITEM(\
KSMETHOD_STREAMIO_WRITE,\
KSMETHOD_TYPE_READ,\
(Handler),\
sizeof(KSMETHOD),\
0,\
NULL)
#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 {
KSPROPERTY_MEDIASEEKING_CAPABILITIES,
KSPROPERTY_MEDIASEEKING_FORMATS,
KSPROPERTY_MEDIASEEKING_TIMEFORMAT,
KSPROPERTY_MEDIASEEKING_POSITION,
KSPROPERTY_MEDIASEEKING_STOPPOSITION,
KSPROPERTY_MEDIASEEKING_POSITIONS,
KSPROPERTY_MEDIASEEKING_DURATION,
KSPROPERTY_MEDIASEEKING_AVAILABLE,
KSPROPERTY_MEDIASEEKING_PREROLL,
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)
//===========================================================================
#define STATIC_KSPROPSETID_Topology\
0x720D4AC0L, 0x7533, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
DEFINE_GUIDSTRUCT("720D4AC0-7533-11D0-A5D6-28DB04C10000", KSPROPSETID_Topology);
#define KSPROPSETID_Topology DEFINE_GUIDNAMED(KSPROPSETID_Topology)
typedef enum {
KSPROPERTY_TOPOLOGY_CATEGORIES,
KSPROPERTY_TOPOLOGY_NODES,
KSPROPERTY_TOPOLOGY_CONNECTIONS,
KSPROPERTY_TOPOLOGY_NAME
} KSPROPERTY_TOPOLOGY;
#define DEFINE_KSPROPERTY_ITEM_TOPOLOGY_CATEGORIES(Handler)\
DEFINE_KSPROPERTY_ITEM(\
KSPROPERTY_TOPOLOGY_CATEGORIES,\
(Handler),\
sizeof(KSPROPERTY),\
0,\
NULL, NULL, 0, NULL, NULL, 0)
#define DEFINE_KSPROPERTY_ITEM_TOPOLOGY_NODES(Handler)\
DEFINE_KSPROPERTY_ITEM(\
KSPROPERTY_TOPOLOGY_NODES,\
(Handler),\
sizeof(KSPROPERTY),\
0,\
NULL, NULL, 0, NULL, NULL, 0)
#define DEFINE_KSPROPERTY_ITEM_TOPOLOGY_CONNECTIONS(Handler)\
DEFINE_KSPROPERTY_ITEM(\
KSPROPERTY_TOPOLOGY_CONNECTIONS,\
(Handler),\
sizeof(KSPROPERTY),\
0,\
NULL, NULL, 0, NULL, NULL, 0)
#define DEFINE_KSPROPERTY_ITEM_TOPOLOGY_NAME(Handler)\
DEFINE_KSPROPERTY_ITEM(\
KSPROPERTY_TOPOLOGY_NAME,\
(Handler),\
sizeof(KSP_NODE),\
0,\
NULL, NULL, 0, NULL, NULL, 0)
#define DEFINE_KSPROPERTY_TOPOLOGYSET(TopologySet, Handler)\
DEFINE_KSPROPERTY_TABLE(TopologySet) {\
DEFINE_KSPROPERTY_ITEM_TOPOLOGY_CATEGORIES(Handler),\
DEFINE_KSPROPERTY_ITEM_TOPOLOGY_NODES(Handler),\
DEFINE_KSPROPERTY_ITEM_TOPOLOGY_CONNECTIONS(Handler),\
DEFINE_KSPROPERTY_ITEM_TOPOLOGY_NAME(Handler)\
}
//=============================================================================
//
// properties used by graph manager to talk to particular filters
//
#if defined(_NTDDK_)
#define STATIC_KSPROPSETID_GM \
0xAF627536L, 0xE719, 0x11D2, 0x8A, 0x1D, 0x00, 0x60, 0x97, 0xD2, 0xDF, 0x5D
DEFINE_GUIDSTRUCT("AF627536-E719-11D2-8A1D-006097D2DF5D", KSPROPSETID_GM);
#define KSPROPSETID_GM DEFINE_GUIDNAMED(KSPROPSETID_GM)
typedef VOID (*PFNKSGRAPHMANAGER_NOTIFY)(IN PFILE_OBJECT GraphManager,
IN ULONG EventId,
IN PVOID Filter,
IN PVOID Pin,
IN PVOID Frame,
IN ULONG Duration);
typedef struct KSGRAPHMANAGER_FUNCTIONTABLE {
PFNKSGRAPHMANAGER_NOTIFY NotifyEvent;
} KSGRAPHMANAGER_FUNCTIONTABLE, PKSGRAPHMANAGER_FUNCTIONTABLE;
typedef struct _KSPROPERTY_GRAPHMANAGER_INTERFACE {
PFILE_OBJECT GraphManager;
KSGRAPHMANAGER_FUNCTIONTABLE FunctionTable;
} KSPROPERTY_GRAPHMANAGER_INTERFACE, *PKSPROPERTY_GRAPHMANAGER_INTERFACE;
//
// Commands
//
typedef enum {
KSPROPERTY_GM_GRAPHMANAGER,
KSPROPERTY_GM_TIMESTAMP_CLOCK,
KSPROPERTY_GM_RATEMATCH,
KSPROPERTY_GM_RENDER_CLOCK,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -