diff options
Diffstat (limited to 'AVStream/avssamp/avssamp.cpp')
| -rw-r--r-- | AVStream/avssamp/avssamp.cpp | 243 |
1 files changed, 243 insertions, 0 deletions
diff --git a/AVStream/avssamp/avssamp.cpp b/AVStream/avssamp/avssamp.cpp new file mode 100644 index 00000000..5a2c2b77 --- /dev/null +++ b/AVStream/avssamp/avssamp.cpp @@ -0,0 +1,243 @@ +/************************************************************************** + +AVStream Filter-Centric Sample + +Copyright (c) 1999 - 2001, Microsoft Corporation + +File: + +avssamp.cpp + +Abstract: + +This is the main file for the filter-centric sample. + +History: + +created 6/18/01 + +**************************************************************************/ + +#include "avssamp.h" + +/************************************************************************** + +INITIALIZATION CODE + +**************************************************************************/ + + +extern "C" DRIVER_INITIALIZE DriverEntry; + +PVOID operator new +( + size_t iSize, + _When_((poolType & NonPagedPoolMustSucceed) != 0, + __drv_reportError("Must succeed pool allocations are forbidden. " + "Allocation failures cause a system crash")) + POOL_TYPE poolType + ) +{ + PVOID result = ExAllocatePoolWithTag(poolType, iSize, 'wNCK'); + + if (result) { + RtlZeroMemory(result, iSize); + } + + return result; +} + +PVOID operator new +( + size_t iSize, + _When_((poolType & NonPagedPoolMustSucceed) != 0, + __drv_reportError("Must succeed pool allocations are forbidden. " + "Allocation failures cause a system crash")) + POOL_TYPE poolType, + ULONG tag + ) +{ + PVOID result = ExAllocatePoolWithTag(poolType, iSize, tag); + + if (result) { + RtlZeroMemory(result, iSize); + } + + return result; +} + +/*++ + +Routine Description: + +Array delete() operator. + +Arguments: + +pVoid - +The memory to free. + +Return Value: + +None + +--*/ +void +__cdecl +operator delete[]( + PVOID pVoid + ) +{ + if (pVoid) + { + ExFreePool(pVoid); + } +} + +/*++ + +Routine Description: + +Sized delete() operator. + +Arguments: + +pVoid - +The memory to free. + +size - +The size of the memory to free. + +Return Value: + +None + +--*/ +void __cdecl operator delete +( + void *pVoid, + size_t /*size*/ + ) +{ + if (pVoid) + { + ExFreePool(pVoid); + } +} + +/*++ + +Routine Description: + +Sized delete[]() operator. + +Arguments: + +pVoid - +The memory to free. + +size - +The size of the memory to free. + +Return Value: + +None + +--*/ +void __cdecl operator delete[] +( + void *pVoid, + size_t /*size*/ + ) +{ + if (pVoid) + { + ExFreePool(pVoid); + } +} + +extern "C" +NTSTATUS +DriverEntry( + IN PDRIVER_OBJECT DriverObject, + IN PUNICODE_STRING RegistryPath +) + +/*++ + +Routine Description: + +Driver entry point. Pass off control to the AVStream initialization +function (KsInitializeDriver) and return the status code from it. + +Arguments: + +DriverObject - +The WDM driver object for our driver + +RegistryPath - +The registry path for our registry info + +Return Value: + +As from KsInitializeDriver + +--*/ + +{ + + // + // Simply pass the device descriptor and parameters off to AVStream + // to initialize us. This will cause filter factories to be set up + // at add & start. Everything is done based on the descriptors passed + // here. + // + return + KsInitializeDriver( + DriverObject, + RegistryPath, + &CaptureDeviceDescriptor + ); + +} + +/************************************************************************** + +DESCRIPTOR AND DISPATCH LAYOUT + +**************************************************************************/ + +// +// FilterDescriptors: +// +// The table of filter descriptors that this device supports. Each one of +// these will be used as a template to create a filter-factory on the device. +// +DEFINE_KSFILTER_DESCRIPTOR_TABLE(FilterDescriptors) { + &CaptureFilterDescriptor +}; + +// +// CaptureDeviceDescriptor: +// +// This is the device descriptor for the capture device. It points to the +// dispatch table and contains a list of filter descriptors that describe +// filter-types that this device supports. Note that the filter-descriptors +// can be created dynamically and the factories created via +// KsCreateFilterFactory as well. +// +const +KSDEVICE_DESCRIPTOR +CaptureDeviceDescriptor = { + // + // Since this is a software sample (filter-centric filters usually are + // software kinds of transforms), we really don't care about device level + // notifications and work. The default behavior done on behalf of us + // by AVStream will be quite sufficient. + // + NULL, + SIZEOF_ARRAY(FilterDescriptors), + FilterDescriptors, + KSDEVICE_DESCRIPTOR_VERSION +}; + |
