summaryrefslogtreecommitdiff
path: root/AVStream/avssamp/avssamp.cpp
diff options
context:
space:
mode:
authorWei Mao <[email protected]>2017-03-17 19:47:04 -0700
committerWei Mao <[email protected]>2017-03-17 19:47:04 -0700
commit1a3e0d580380e58bf336a242d2affc8a1e2d1ddf (patch)
treebf5d9c5b0b4cba1b81726b9f78c4d5ff5c636fea /AVStream/avssamp/avssamp.cpp
parentda21c8784c83c5fd614f3030323e229d6a5fb10e (diff)
Fix cases
Diffstat (limited to 'AVStream/avssamp/avssamp.cpp')
-rw-r--r--AVStream/avssamp/avssamp.cpp243
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
+};
+