📄 ks.h
字号:
} 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,
} KSPROPERTY_GM;
#endif
//===========================================================================
#define STATIC_KSCATEGORY_BRIDGE \
0x085AFF00L, 0x62CE, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
DEFINE_GUIDSTRUCT("085AFF00-62CE-11CF-A5D6-28DB04C10000", KSCATEGORY_BRIDGE);
#define KSCATEGORY_BRIDGE DEFINE_GUIDNAMED(KSCATEGORY_BRIDGE)
#define STATIC_KSCATEGORY_CAPTURE \
0x65E8773DL, 0x8F56, 0x11D0, 0xA3, 0xB9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
DEFINE_GUIDSTRUCT("65E8773D-8F56-11D0-A3B9-00A0C9223196", KSCATEGORY_CAPTURE);
#define KSCATEGORY_CAPTURE DEFINE_GUIDNAMED(KSCATEGORY_CAPTURE)
#define STATIC_KSCATEGORY_RENDER \
0x65E8773EL, 0x8F56, 0x11D0, 0xA3, 0xB9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
DEFINE_GUIDSTRUCT("65E8773E-8F56-11D0-A3B9-00A0C9223196", KSCATEGORY_RENDER);
#define KSCATEGORY_RENDER DEFINE_GUIDNAMED(KSCATEGORY_RENDER)
#define STATIC_KSCATEGORY_MIXER \
0xAD809C00L, 0x7B88, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
DEFINE_GUIDSTRUCT("AD809C00-7B88-11D0-A5D6-28DB04C10000", KSCATEGORY_MIXER);
#define KSCATEGORY_MIXER DEFINE_GUIDNAMED(KSCATEGORY_MIXER)
#define STATIC_KSCATEGORY_SPLITTER \
0x0A4252A0L, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
DEFINE_GUIDSTRUCT("0A4252A0-7E70-11D0-A5D6-28DB04C10000", KSCATEGORY_SPLITTER);
#define KSCATEGORY_SPLITTER DEFINE_GUIDNAMED(KSCATEGORY_SPLITTER)
#define STATIC_KSCATEGORY_DATACOMPRESSOR \
0x1E84C900L, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
DEFINE_GUIDSTRUCT("1E84C900-7E70-11D0-A5D6-28DB04C10000", KSCATEGORY_DATACOMPRESSOR);
#define KSCATEGORY_DATACOMPRESSOR DEFINE_GUIDNAMED(KSCATEGORY_DATACOMPRESSOR)
#define STATIC_KSCATEGORY_DATADECOMPRESSOR \
0x2721AE20L, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
DEFINE_GUIDSTRUCT("2721AE20-7E70-11D0-A5D6-28DB04C10000", KSCATEGORY_DATADECOMPRESSOR);
#define KSCATEGORY_DATADECOMPRESSOR DEFINE_GUIDNAMED(KSCATEGORY_DATADECOMPRESSOR)
#define STATIC_KSCATEGORY_DATATRANSFORM \
0x2EB07EA0L, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
DEFINE_GUIDSTRUCT("2EB07EA0-7E70-11D0-A5D6-28DB04C10000", KSCATEGORY_DATATRANSFORM);
#define KSCATEGORY_DATATRANSFORM DEFINE_GUIDNAMED(KSCATEGORY_DATATRANSFORM)
#define STATIC_KSCATEGORY_COMMUNICATIONSTRANSFORM \
0xCF1DDA2CL, 0x9743, 0x11D0, 0xA3, 0xEE, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
DEFINE_GUIDSTRUCT("CF1DDA2C-9743-11D0-A3EE-00A0C9223196", KSCATEGORY_COMMUNICATIONSTRANSFORM);
#define KSCATEGORY_COMMUNICATIONSTRANSFORM DEFINE_GUIDNAMED(KSCATEGORY_COMMUNICATIONSTRANSFORM)
#define STATIC_KSCATEGORY_INTERFACETRANSFORM \
0xCF1DDA2DL, 0x9743, 0x11D0, 0xA3, 0xEE, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
DEFINE_GUIDSTRUCT("CF1DDA2D-9743-11D0-A3EE-00A0C9223196", KSCATEGORY_INTERFACETRANSFORM);
#define KSCATEGORY_INTERFACETRANSFORM DEFINE_GUIDNAMED(KSCATEGORY_INTERFACETRANSFORM)
#define STATIC_KSCATEGORY_MEDIUMTRANSFORM \
0xCF1DDA2EL, 0x9743, 0x11D0, 0xA3, 0xEE, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
DEFINE_GUIDSTRUCT("CF1DDA2E-9743-11D0-A3EE-00A0C9223196", KSCATEGORY_MEDIUMTRANSFORM);
#define KSCATEGORY_MEDIUMTRANSFORM DEFINE_GUIDNAMED(KSCATEGORY_MEDIUMTRANSFORM)
#define STATIC_KSCATEGORY_FILESYSTEM \
0x760FED5EL, 0x9357, 0x11D0, 0xA3, 0xCC, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
DEFINE_GUIDSTRUCT("760FED5E-9357-11D0-A3CC-00A0C9223196", KSCATEGORY_FILESYSTEM);
#define KSCATEGORY_FILESYSTEM DEFINE_GUIDNAMED(KSCATEGORY_FILESYSTEM)
// KSNAME_Clock
#define STATIC_KSCATEGORY_CLOCK \
0x53172480L, 0x4791, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
DEFINE_GUIDSTRUCT("53172480-4791-11D0-A5D6-28DB04C10000", KSCATEGORY_CLOCK);
#define KSCATEGORY_CLOCK DEFINE_GUIDNAMED(KSCATEGORY_CLOCK)
#define STATIC_KSCATEGORY_PROXY \
0x97EBAACAL, 0x95BD, 0x11D0, 0xA3, 0xEA, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
DEFINE_GUIDSTRUCT("97EBAACA-95BD-11D0-A3EA-00A0C9223196", KSCATEGORY_PROXY);
#define KSCATEGORY_PROXY DEFINE_GUIDNAMED(KSCATEGORY_PROXY)
#define STATIC_KSCATEGORY_QUALITY \
0x97EBAACBL, 0x95BD, 0x11D0, 0xA3, 0xEA, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
DEFINE_GUIDSTRUCT("97EBAACB-95BD-11D0-A3EA-00A0C9223196", KSCATEGORY_QUALITY);
#define KSCATEGORY_QUALITY DEFINE_GUIDNAMED(KSCATEGORY_QUALITY)
typedef struct {
ULONG FromNode;
ULONG FromNodePin;
ULONG ToNode;
ULONG ToNodePin;
} KSTOPOLOGY_CONNECTION, *PKSTOPOLOGY_CONNECTION;
typedef struct {
ULONG CategoriesCount;
const GUID* Categories;
ULONG TopologyNodesCount;
const GUID* TopologyNodes;
ULONG TopologyConnectionsCount;
const KSTOPOLOGY_CONNECTION* TopologyConnections;
const GUID* TopologyNodesNames;
ULONG Reserved;
} KSTOPOLOGY, *PKSTOPOLOGY;
#define KSFILTER_NODE ((ULONG)-1)
#define KSALL_NODES ((ULONG)-1)
typedef struct {
ULONG CreateFlags;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -