📄 ks.h
字号:
#define KSMEMORY_TYPE_DONT_CARE GUID_NULL
#define STATIC_KSMEMORY_TYPE_DONT_CARE STATIC_GUID_NULL
#define KS_TYPE_DONT_CARE GUID_NULL
#define STATIC_KS_TYPE_DONT_CARE STATIC_GUID_NULL
#define STATIC_KSMEMORY_TYPE_SYSTEM \
0x091bb638L, 0x603f, 0x11d1, 0xb0, 0x67, 0x00, 0xa0, 0xc9, 0x06, 0x28, 0x02
DEFINE_GUIDSTRUCT("091bb638-603f-11d1-b067-00a0c9062802", KSMEMORY_TYPE_SYSTEM);
#define KSMEMORY_TYPE_SYSTEM DEFINE_GUIDNAMED(KSMEMORY_TYPE_SYSTEM)
#define STATIC_KSMEMORY_TYPE_USER \
0x8cb0fc28L, 0x7893, 0x11d1, 0xb0, 0x69, 0x00, 0xa0, 0xc9, 0x06, 0x28, 0x02
DEFINE_GUIDSTRUCT("8cb0fc28-7893-11d1-b069-00a0c9062802", KSMEMORY_TYPE_USER);
#define KSMEMORY_TYPE_USER DEFINE_GUIDNAMED(KSMEMORY_TYPE_USER)
#define STATIC_KSMEMORY_TYPE_KERNEL_PAGED \
0xd833f8f8L, 0x7894, 0x11d1, 0xb0, 0x69, 0x00, 0xa0, 0xc9, 0x06, 0x28, 0x02
DEFINE_GUIDSTRUCT("d833f8f8-7894-11d1-b069-00a0c9062802", KSMEMORY_TYPE_KERNEL_PAGED);
#define KSMEMORY_TYPE_KERNEL_PAGED DEFINE_GUIDNAMED(KSMEMORY_TYPE_KERNEL_PAGED)
#define STATIC_KSMEMORY_TYPE_KERNEL_NONPAGED \
0x4a6d5fc4L, 0x7895, 0x11d1, 0xb0, 0x69, 0x00, 0xa0, 0xc9, 0x06, 0x28, 0x02
DEFINE_GUIDSTRUCT("4a6d5fc4-7895-11d1-b069-00a0c9062802", KSMEMORY_TYPE_KERNEL_NONPAGED);
#define KSMEMORY_TYPE_KERNEL_NONPAGED DEFINE_GUIDNAMED(KSMEMORY_TYPE_KERNEL_NONPAGED)
// old KS clients did not specify the device memory type
#define STATIC_KSMEMORY_TYPE_DEVICE_UNKNOWN \
0x091bb639L, 0x603f, 0x11d1, 0xb0, 0x67, 0x00, 0xa0, 0xc9, 0x06, 0x28, 0x02
DEFINE_GUIDSTRUCT("091bb639-603f-11d1-b067-00a0c9062802", KSMEMORY_TYPE_DEVICE_UNKNOWN);
#define KSMEMORY_TYPE_DEVICE_UNKNOWN DEFINE_GUIDNAMED(KSMEMORY_TYPE_DEVICE_UNKNOWN)
//
// Helper framing macros.
//
#define DECLARE_SIMPLE_FRAMING_EX(FramingExName, MemoryType, Flags, Frames, Alignment, MinFrameSize, MaxFrameSize) \
const KSALLOCATOR_FRAMING_EX FramingExName = \
{\
1, \
0, \
{\
1, \
1, \
0 \
}, \
0, \
{\
{\
MemoryType, \
STATIC_KS_TYPE_DONT_CARE, \
0, \
0, \
Flags, \
Frames, \
Alignment, \
0, \
{\
0, \
(ULONG)-1, \
1 \
}, \
{\
{\
MinFrameSize, \
MaxFrameSize, \
1 \
}, \
0, \
0 \
}\
}\
}\
}
#define SetDefaultKsCompression(KsCompressionPointer) \
{\
KsCompressionPointer->RatioNumerator = 1;\
KsCompressionPointer->RatioDenominator = 1;\
KsCompressionPointer->RatioConstantMargin = 0;\
}
#define SetDontCareKsFramingRange(KsFramingRangePointer) \
{\
KsFramingRangePointer->MinFrameSize = 0;\
KsFramingRangePointer->MaxFrameSize = (ULONG) -1;\
KsFramingRangePointer->Stepping = 1;\
}
#define SetKsFramingRange(KsFramingRangePointer, P_MinFrameSize, P_MaxFrameSize) \
{\
KsFramingRangePointer->MinFrameSize = P_MinFrameSize;\
KsFramingRangePointer->MaxFrameSize = P_MaxFrameSize;\
KsFramingRangePointer->Stepping = 1;\
}
#define SetKsFramingRangeWeighted(KsFramingRangeWeightedPointer, P_MinFrameSize, P_MaxFrameSize) \
{\
KS_FRAMING_RANGE *KsFramingRange = &KsFramingRangeWeightedPointer->Range;\
SetKsFramingRange(KsFramingRange, P_MinFrameSize, P_MaxFrameSize);\
KsFramingRangeWeightedPointer->InPlaceWeight = 0;\
KsFramingRangeWeightedPointer->NotInPlaceWeight = 0;\
}
#define INITIALIZE_SIMPLE_FRAMING_EX(FramingExPointer, P_MemoryType, P_Flags, P_Frames, P_Alignment, P_MinFrameSize, P_MaxFrameSize) \
{\
KS_COMPRESSION *KsCompression = &FramingExPointer->OutputCompression;\
KS_FRAMING_RANGE *KsFramingRange = &FramingExPointer->FramingItem[0].PhysicalRange;\
KS_FRAMING_RANGE_WEIGHTED *KsFramingRangeWeighted = &FramingExPointer->FramingItem[0].FramingRange;\
FramingExPointer->CountItems = 1;\
FramingExPointer->PinFlags = 0;\
SetDefaultKsCompression(KsCompression);\
FramingExPointer->PinWeight = 0;\
FramingExPointer->FramingItem[0].MemoryType = P_MemoryType;\
FramingExPointer->FramingItem[0].BusType = KS_TYPE_DONT_CARE;\
FramingExPointer->FramingItem[0].MemoryFlags = 0;\
FramingExPointer->FramingItem[0].BusFlags = 0;\
FramingExPointer->FramingItem[0].Flags = P_Flags;\
FramingExPointer->FramingItem[0].Frames = P_Frames;\
FramingExPointer->FramingItem[0].FileAlignment = P_Alignment;\
FramingExPointer->FramingItem[0].MemoryTypeWeight = 0;\
SetDontCareKsFramingRange(KsFramingRange);\
SetKsFramingRangeWeighted(KsFramingRangeWeighted, P_MinFrameSize, P_MaxFrameSize);\
}
// KSEVENTSETID_StreamAllocator: {75D95571-073C-11d0-A161-0020AFD156E4}
#define STATIC_KSEVENTSETID_StreamAllocator\
0x75d95571L, 0x073c, 0x11d0, 0xa1, 0x61, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4
DEFINE_GUIDSTRUCT("75d95571-073c-11d0-a161-0020afd156e4", KSEVENTSETID_StreamAllocator);
#define KSEVENTSETID_StreamAllocator DEFINE_GUIDNAMED(KSEVENTSETID_StreamAllocator)
typedef enum {
KSEVENT_STREAMALLOCATOR_INTERNAL_FREEFRAME,
KSEVENT_STREAMALLOCATOR_FREEFRAME
} KSEVENT_STREAMALLOCATOR;
#define STATIC_KSMETHODSETID_StreamAllocator\
0xcf6e4341L, 0xec87, 0x11cf, 0xa1, 0x30, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4
DEFINE_GUIDSTRUCT("cf6e4341-ec87-11cf-a130-0020afd156e4", KSMETHODSETID_StreamAllocator);
#define KSMETHODSETID_StreamAllocator DEFINE_GUIDNAMED(KSMETHODSETID_StreamAllocator)
typedef enum {
KSMETHOD_STREAMALLOCATOR_ALLOC,
KSMETHOD_STREAMALLOCATOR_FREE
} KSMETHOD_STREAMALLOCATOR;
#define DEFINE_KSMETHOD_ITEM_STREAMALLOCATOR_ALLOC(Handler)\
DEFINE_KSMETHOD_ITEM(\
KSMETHOD_STREAMALLOCATOR_ALLOC,\
KSMETHOD_TYPE_WRITE,\
(Handler),\
sizeof(KSMETHOD),\
sizeof(PVOID),\
NULL)
#define DEFINE_KSMETHOD_ITEM_STREAMALLOCATOR_FREE(Handler)\
DEFINE_KSMETHOD_ITEM(\
KSMETHOD_STREAMALLOCATOR_FREE,\
KSMETHOD_TYPE_READ,\
(Handler),\
sizeof(KSMETHOD),\
sizeof(PVOID),\
NULL)
#define DEFINE_KSMETHOD_ALLOCATORSET(AllocatorSet, MethodAlloc, MethodFree)\
DEFINE_KSMETHOD_TABLE(AllocatorSet) {\
DEFINE_KSMETHOD_ITEM_STREAMALLOCATOR_ALLOC(MethodAlloc),\
DEFINE_KSMETHOD_ITEM_STREAMALLOCATOR_FREE(MethodFree)\
}
#define STATIC_KSPROPSETID_StreamAllocator\
0xcf6e4342L, 0xec87, 0x11cf, 0xa1, 0x30, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4
DEFINE_GUIDSTRUCT("cf6e4342-ec87-11cf-a130-0020afd156e4", KSPROPSETID_StreamAllocator);
#define KSPROPSETID_StreamAllocator DEFINE_GUIDNAMED(KSPROPSETID_StreamAllocator)
#if defined(_NTDDK_)
typedef enum {
KSPROPERTY_STREAMALLOCATOR_FUNCTIONTABLE,
KSPROPERTY_STREAMALLOCATOR_STATUS
} KSPROPERTY_STREAMALLOCATOR;
#define DEFINE_KSPROPERTY_ITEM_STREAMALLOCATOR_FUNCTIONTABLE(Handler)\
DEFINE_KSPROPERTY_ITEM(\
KSPROPERTY_STREAMALLOCATOR_FUNCTIONTABLE,\
(Handler),\
sizeof(KSPROPERTY),\
sizeof(KSSTREAMALLOCATOR_FUNCTIONTABLE),\
NULL, NULL, 0, NULL, NULL, 0)
#define DEFINE_KSPROPERTY_ITEM_STREAMALLOCATOR_STATUS(Handler)\
DEFINE_KSPROPERTY_ITEM(\
KSPROPERTY_STREAMALLOCATOR_STATUS,\
(Handler),\
sizeof(KSPROPERTY),\
sizeof(KSSTREAMALLOCATOR_STATUS),\
NULL, NULL, 0, NULL, NULL, 0)
#define DEFINE_KSPROPERTY_ALLOCATORSET(AllocatorSet, PropFunctionTable, PropStatus)\
DEFINE_KSPROPERTY_TABLE(AllocatorSet) {\
DEFINE_KSPROPERTY_ITEM_STREAMALLOCATOR_STATUS(PropStatus),\
DEFINE_KSPROPERTY_ITEM_STREAMALLOCATOR_FUNCTIONTABLE(PropFunctionTable)\
}
typedef
NTSTATUS
(*PFNALLOCATOR_ALLOCATEFRAME)(
IN PFILE_OBJECT FileObject,
PVOID *Frame
);
typedef
VOID
(*PFNALLOCATOR_FREEFRAME)(
IN PFILE_OBJECT FileObject,
IN PVOID Frame
);
typedef struct {
PFNALLOCATOR_ALLOCATEFRAME AllocateFrame;
PFNALLOCATOR_FREEFRAME FreeFrame;
} KSSTREAMALLOCATOR_FUNCTIONTABLE, *PKSSTREAMALLOCATOR_FUNCTIONTABLE;
#endif // defined(_NTDDK_)
typedef struct {
KSALLOCATOR_FRAMING Framing;
ULONG AllocatedFrames;
ULONG Reserved;
} KSSTREAMALLOCATOR_STATUS, *PKSSTREAMALLOCATOR_STATUS;
typedef struct {
KSALLOCATOR_FRAMING_EX Framing;
ULONG AllocatedFrames;
ULONG Reserved;
} KSSTREAMALLOCATOR_STATUS_EX, *PKSSTREAMALLOCATOR_STATUS_EX;
#define KSSTREAM_HEADER_OPTIONSF_SPLICEPOINT 0x00000001
#define KSSTREAM_HEADER_OPTIONSF_PREROLL 0x00000002
#define KSSTREAM_HEADER_OPTIONSF_DATADISCONTINUITY 0x00000004
#define KSSTREAM_HEADER_OPTIONSF_TYPECHANGED 0x00000008
#define KSSTREAM_HEADER_OPTIONSF_TIMEVALID 0x00000010
#define KSSTREAM_HEADER_OPTIONSF_TIMEDISCONTINUITY 0x00000040
#define KSSTREAM_HEADER_OPTIONSF_FLUSHONPAUSE 0x00000080
#define KSSTREAM_HEADER_OPTIONSF_DURATIONVALID 0x00000100
#define KSSTREAM_HEADER_OPTIONSF_ENDOFSTREAM 0x00000200
#define KSSTREAM_HEADER_OPTIONSF_LOOPEDDATA 0x80000000
typedef struct {
LONGLONG Time;
ULONG Numerator;
ULONG Denominator;
} KSTIME, *PKSTIME;
typedef struct {
ULONG Size;
ULONG TypeSpecificFlags;
KSTIME PresentationTime;
LONGLONG Duration;
ULONG FrameExtent;
ULONG DataUsed;
PVOID Data;
ULONG OptionsFlags;
#if _WIN64
ULONG Reserved;
#endif
} KSSTREAM_HEADER, *PKSSTREAM_HEADER;
#define STATIC_KSPROPSETID_StreamInterface\
0x1fdd8ee1L, 0x9cd3, 0x11d0, 0x82, 0xaa, 0x00, 0x00, 0xf8, 0x22, 0xfe, 0x8a
DEFINE_GUIDSTRUCT("1fdd8ee1-9cd3-11d0-82aa-0000f822fe8a", KSPROPSETID_StreamInterface);
#define KSPROPSETID_StreamInterface DEFINE_GUIDNAMED(KSPROPSETID_StreamInterface)
typedef enum {
KSPROPERTY_STREAMINTERFACE_HEADERSIZE
} KSPROPERTY_STREAMINTERFACE;
#define DEFINE_KSPROPERTY_ITEM_STREAMINTERFACE_HEADERSIZE( GetHandler )\
DEFINE_KSPROPERTY_ITEM(\
KSPROPERTY_STREAMINTERFACE_HEADERSIZE,\
(GetHandler),\
sizeof(KSPROPERTY),\
sizeof(ULONG),\
NULL, NULL, 0, NULL, NULL, 0)
#define DEFINE_KSPROPERTY_STREAMINTERFACESET(StreamInterfaceSet,\
HeaderSizeHandler)\
DEFINE_KSPROPERTY_TABLE(StreamInterfaceSet) {\
DEFINE_KSPROPERTY_ITEM_STREAMINTERFACE_HEADERSIZE( HeaderSizeHandler )\
}
#define STATIC_KSPROPSETID_Stream\
0x65aaba60L, 0x98ae, 0x11cf, 0xa1, 0x0d, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4
DEFINE_GUIDSTRUCT("65aaba60-98ae-11cf-a10d-0020afd156e4", KSPROPSETID_Stream);
#define KSPROPSETID_Stream DEFINE_GUIDNAMED(KSPROPSETID_Stream)
typedef enum {
KSPROPERTY_STREAM_ALLOCATOR,
KSPROPERTY_STREAM_QUALITY,
KSPROPERTY_STREAM_DEGRADATION,
KSPROPERTY_STREAM_MASTERCLOCK,
KSPROPERTY_STREAM_TIMEFORMAT,
KSPROPERTY_STREAM_PRESENTATIONTIME,
KSPROPERTY_STREAM_PRESENTATIONEXTENT,
KSPROPERTY_STREAM_FRAMETIME,
KSPROPERTY_STREAM_RATECAPABILITY,
KSPROPERTY_STREAM_RATE,
KSPROPERTY_STREAM_PIPE_ID
} KSPROPERTY_STREAM;
#define DEFINE_KSPROPERTY_ITEM_STREAM_ALLOCATOR(GetHandler, SetHandler)\
DEFINE_KSPROPERTY_ITEM(\
KSPROPERTY_STREAM_ALLOCATOR,\
(GetHandler),\
sizeof(KSPROPERTY),\
sizeof(HANDLE),\
(SetHandler),\
NULL, 0, NULL, NULL, 0)
#define DEFINE_KSPROPERTY_ITEM_STREAM_QUALITY(Handler)\
DEFINE_KSPROPERTY_ITEM(\
KSPROPERTY_STREAM_QUALITY,\
(Handler),\
sizeof(KSPROPERTY),\
sizeof(KSQUALITY_MANAGER),\
NULL, NULL, 0, NULL, NULL, 0)
#define DEFINE_KSPROPERTY_ITEM_STREAM_DEGRADATION(GetHandler, SetHandler)\
DEFINE_KSPROPERTY_ITEM(\
KSPROPERTY_STREAM_DEGRADATION,\
(GetHandler),\
sizeof(KSPROPERTY),\
0,\
(SetHandler),\
NULL, 0, NULL, NULL, 0)
#define DEFINE_KSPROPERTY_ITEM_STREAM_MASTERCLOCK(GetHandler, SetHandler)\
DEFINE_KSPROPERTY_ITEM(\
KSPROPERTY_STREAM_MASTERCLOCK,\
(GetHandler),\
sizeof(KSPROPERTY),\
sizeof(HANDLE),\
(SetHandler),\
NULL, 0, NULL, NULL, 0)
#define DEFINE_KSPROPERTY_ITEM_STREAM_TIMEFORMAT(Handler)\
DEFINE_KSPROPERTY_ITEM(\
KSPROPERTY_STREAM_TIMEFORMAT,\
(Handler),\
sizeof(KSPROPERTY),\
sizeof(GUID),\
NULL, NULL, 0, NULL, NULL, 0)
#define DEFINE_KSPROPERTY_ITEM_STREAM_PRESENTATIONTIME(GetHandler, SetHandler)\
DEFINE_KSPROPERTY_ITEM(\
KSPROPERTY_STREAM_PRESENTATIONTIME,\
(GetHandler),\
sizeof(KSPROPERTY),\
sizeof(KSTIME),\
(SetHandler),\
NULL, 0, NULL, NULL, 0)
#define DEFINE_KSPROPERTY_ITEM_STREAM_PRESENTATIONEXTENT(Handler)\
DEFINE_KSPROPERTY_ITEM(\
KSPROPERTY_STREAM_PRESENTATIONEXTENT,\
(Handler),\
sizeof(KSPROPERTY),\
sizeof(LONGLONG),\
NULL, NULL, 0, NULL, NULL, 0)
#define DEFINE_KSPROPERTY_ITEM_STREAM_FRAMETIME(Handler)\
DEFINE_KSPROPERTY_ITEM(\
KSPROPERTY_STREAM_FRAMETIME,\
(Handler),\
sizeof(KSPROPERTY),\
sizeof(KSFRAMETIME),\
NULL, NULL, 0, NULL, NULL, 0)
#define DEFINE_KSPROPERTY_ITEM_STREAM_RATECAPABILITY(Handler)\
DEFINE_K
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -