📄 filter.cpp
字号:
/**************************************************************************
AVStream Simulated Hardware Sample
Copyright (c) 2001, Microsoft Corporation.
File:
filter.cpp
Abstract:
This file contains the filter level implementation for the
capture filter.
History:
created 3/12/2001
**************************************************************************/
#include "avshws.h"
/**************************************************************************
PAGEABLE CODE
**************************************************************************/
#ifdef ALLOC_PRAGMA
#pragma code_seg("PAGE")
#endif // ALLOC_PRAGMA
NTSTATUS
CCaptureFilter::
DispatchCreate (
IN PKSFILTER Filter,
IN PIRP Irp
)
/*++
Routine Description:
This is the creation dispatch for the capture filter. It creates
the CCaptureFilter object, associates it with the AVStream filter
object, and bag the CCaptureFilter for later cleanup.
Arguments:
Filter -
The AVStream filter being created
Irp -
The creation Irp
Return Value:
Success / failure
--*/
{
PAGED_CODE();
NTSTATUS Status = STATUS_SUCCESS;
CCaptureFilter *CapFilter = new (NonPagedPool) CCaptureFilter (Filter);
if (!CapFilter) {
//
// Return failure if we couldn't create the filter.
//
Status = STATUS_INSUFFICIENT_RESOURCES;
} else {
//
// Add the item to the object bag if we we were successful.
// Whenever the filter closes, the bag is cleaned up and we will be
// freed.
//
Status = KsAddItemToObjectBag (
Filter -> Bag,
reinterpret_cast <PVOID> (CapFilter),
reinterpret_cast <PFNKSFREE> (CCaptureFilter::Cleanup)
);
if (!NT_SUCCESS (Status)) {
delete CapFilter;
} else {
Filter -> Context = reinterpret_cast <PVOID> (CapFilter);
}
}
return Status;
}
/**************************************************************************
DESCRIPTOR AND DISPATCH LAYOUT
**************************************************************************/
GUID g_PINNAME_VIDEO_CAPTURE = {STATIC_PINNAME_VIDEO_CAPTURE};
//
// CaptureFilterCategories:
//
// The list of category GUIDs for the capture filter.
//
const
GUID
CaptureFilterCategories [CAPTURE_FILTER_CATEGORIES_COUNT] = {
STATICGUIDOF (KSCATEGORY_VIDEO),
STATICGUIDOF (KSCATEGORY_CAPTURE)
};
//
// CaptureFilterPinDescriptors:
//
// The list of pin descriptors on the capture filter.
//
const
KSPIN_DESCRIPTOR_EX
CaptureFilterPinDescriptors [CAPTURE_FILTER_PIN_COUNT] = {
//
// Capture Pin
//
{
&CapturePinDispatch,
NULL,
{
NULL, // Interfaces (NULL, 0 == default)
0,
NULL, // Mediums (NULL, 0 == default)
0,
SIZEOF_ARRAY (CapturePinDataRanges), // Range Count
CapturePinDataRanges, // Ranges
KSPIN_DATAFLOW_OUT, // Dataflow
KSPIN_COMMUNICATION_BOTH, // Communication
&KSCATEGORY_VIDEO, // Category
&g_PINNAME_VIDEO_CAPTURE, // Name
0 // Reserved
},
KSPIN_FLAG_GENERATE_MAPPINGS | // Pin Flags
KSPIN_FLAG_PROCESS_IN_RUN_STATE_ONLY,
1, // Instances Possible
1, // Instances Necessary
&CapturePinAllocatorFraming, // Allocator Framing
reinterpret_cast <PFNKSINTERSECTHANDLEREX>
(CCapturePin::IntersectHandler)
}
};
//
// CaptureFilterDispatch:
//
// This is the dispatch table for the capture filter. It provides notification
// of creation, closure, processing (for filter-centrics, not for the capture
// filter), and resets (for filter-centrics, not for the capture filter).
//
const
KSFILTER_DISPATCH
CaptureFilterDispatch = {
CCaptureFilter::DispatchCreate, // Filter Create
NULL, // Filter Close
NULL, // Filter Process
NULL // Filter Reset
};
//
// CaptureFilterDescription:
//
// The descriptor for the capture filter. We don't specify any topology
// since there's only one pin on the filter. Realistically, there would
// be some topological relationships here because there would be input
// pins from crossbars and the like.
//
const
KSFILTER_DESCRIPTOR
CaptureFilterDescriptor = {
&CaptureFilterDispatch, // Dispatch Table
NULL, // Automation Table
KSFILTER_DESCRIPTOR_VERSION, // Version
0, // Flags
&KSNAME_Filter, // Reference GUID
DEFINE_KSFILTER_PIN_DESCRIPTORS (CaptureFilterPinDescriptors),
DEFINE_KSFILTER_CATEGORIES (CaptureFilterCategories),
0,
sizeof (KSNODE_DESCRIPTOR),
NULL,
0,
NULL,
NULL // Component ID
};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -