📄 main.cpp
字号:
reinterpret_cast <PFNKSINTERSECTHANDLEREX>
(VbiPin::intersectRange)
}
};
/////////////////////////////////////////////////////////////////////////////////////////
KSPIN_DESCRIPTOR_EX
CaptureFilterFSPinDescriptors[] =
{
// Analog Video Input pin
{
&VideoInputPinDispatch, // Dispatch
NULL, // AutomationTable
{
0, // Interfaces count
NULL, // Interfaces
1, // Mediums count
&VideoInputPinMedium, // Mediums
VIDEO_INPUT_PIN_RANGE_COUNT, // Range Count
VideoInputPinDataRanges, // Ranges
KSPIN_DATAFLOW_IN, // Dataflow
KSPIN_COMMUNICATION_BOTH, // Communication
&PINNAME_VIDEO_ANALOGVIDEOIN, // Category
&PINNAME_VIDEO_ANALOGVIDEOIN, // Name
0 // Reserved
},
KSPIN_FLAG_USE_STANDARD_TRANSPORT,// Flag for channel change info!
1, // Instances Possible
1, // Instances Necessary
NULL, // Allocator Framing
NULL // IntersectHandler
},
// Analog Audio Input pin
{
NULL, // Dispatch
NULL, // AutomationTable
{
0, // Interfaces count
NULL, // Interfaces
1, // Mediums count
&AudioInputPinMedium, // Mediums
AUDIO_INPUT_PIN_RANGE_COUNT, // Range Count
AudioInputPinDataRanges, // Ranges
KSPIN_DATAFLOW_IN, // Dataflow
KSPIN_COMMUNICATION_BOTH, // Communication
&PINNAME_VIDEO_ANALOGAUDIOIN, // Category
&PINNAME_VIDEO_ANALOGAUDIOIN, // Name
0 // Reserved
},
0, // Flags
1, // Instances Possible
0, // Instances Necessary
NULL, // Allocator Framing
NULL // IntersectHandler
},
// Capture Pin
{
&VideoPinDispatch,
&PIN_AUTOMATION_TABLE,
{
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
&PINNAME_VIDEO_CAPTURE, // Category
&PINNAME_VIDEO_CAPTURE, // Name
0 // Reserved
},
KSPIN_FLAG_DO_NOT_INITIATE_PROCESSING, // Pin Flags
1, // Instances Possible
0, // Instances Necessary
&PIN_ALLOCATOR_FRAMING, // Allocator Framing
reinterpret_cast <PFNKSINTERSECTHANDLEREX>
(VideoPin::intersectRange)
},
//
// Audio Output Pin
//
{
&g_audio_pin_dispatch,
NULL,
{
NULL, // Interfaces (NULL, 0 == default)
0,
NULL, // Mediums (NULL, 0 == default)
0,
SIZEOF_ARRAY(g_audio_pin_data_ranges), // Range Count
g_audio_pin_data_ranges, // Ranges
KSPIN_DATAFLOW_OUT, // Dataflow
KSPIN_COMMUNICATION_BOTH, // Communication (both source and sink)
&PINNAME_CAPTURE, // Category
(GUID*)&PINNAME_AUDIO_OUT, // Name
0 // Reserved
},
KSPIN_FLAG_DO_NOT_INITIATE_PROCESSING, //Pin Flags
1, // Instances Possible
0, // Instances Necessary
&PIN_ALLOCATOR_FRAMING, // Allocator Framing
(PFNKSINTERSECTHANDLEREX)AudioPin::static_IntersectHandler
},
};
//
// 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.
//
KSFILTER_DESCRIPTOR
CaptureFilterDescriptor =
{
&captureFilterDispatch, // Dispatch Table
&captureFilterAutomationTable, // Automation Table
KSFILTER_DESCRIPTOR_VERSION, // Version
0, // Flags
&KSNAME_Filter, // Reference GUID
DEFINE_KSFILTER_PIN_DESCRIPTORS( CaptureFilterPinDescriptors ),
DEFINE_KSFILTER_CATEGORIES( CaptureFilterCategories ),
DEFINE_KSFILTER_NODE_DESCRIPTORS_NULL,
DEFINE_KSFILTER_DEFAULT_CONNECTIONS,
NULL // Component ID
};
////////////////////////////////////////////////////////////////////////////////
//FS do not need VANC AND HANC
////////////////////////////////////////////////////////////////////////////////
KSFILTER_DESCRIPTOR
CaptureFilterFSDescriptor =
{
&captureFilterDispatch, // Dispatch Table
&captureFilterAutomationTable, // Automation Table
KSFILTER_DESCRIPTOR_VERSION, // Version
0, // Flags
&KSNAME_Filter, // Reference GUID
DEFINE_KSFILTER_PIN_DESCRIPTORS( CaptureFilterFSPinDescriptors ),
DEFINE_KSFILTER_CATEGORIES( CaptureFilterCategories ),
DEFINE_KSFILTER_NODE_DESCRIPTORS_NULL,
DEFINE_KSFILTER_DEFAULT_CONNECTIONS,
NULL // Component ID
};
//////////////////////////////////////////////////////////////////////////////////////////
///jerry add for HANC Audio transfer type
//////////////////////////////////////////////////////////////////////////////////////////
KSFILTER_DESCRIPTOR
CaptureFilterEnableHANCAudioOutDescriptor =
{
&captureFilterDispatch, // Dispatch Table
&captureFilterAutomationTable, // Automation Table
KSFILTER_DESCRIPTOR_VERSION, // Version
0, // Flags
&KSNAME_Filter, // Reference GUID
DEFINE_KSFILTER_PIN_DESCRIPTORS( CaptureFilterEnableHANCAudioOutPinDescriptors ),
DEFINE_KSFILTER_CATEGORIES( CaptureFilterCategories ),
DEFINE_KSFILTER_NODE_DESCRIPTORS_NULL,
DEFINE_KSFILTER_DEFAULT_CONNECTIONS,
NULL // Component ID
};
/////////////////////////////////////////////////////////////////////////////////////////
//***************************************************************************************
//Audio Filter Descriptor
//***************************************************************************************
/////////////////////////////////////////////////////////////////////////////////////////
static
const
GUID
g_audio_filter_categories[] =
{
STATICGUIDOF (KSCATEGORY_AUDIO),
STATICGUIDOF (KSCATEGORY_CAPTURE),
};
KSPIN_DESCRIPTOR_EX
g_audio_filter_pin_descriptors[] =
{
{
NULL, // Dispatch
NULL, // AutomationTable
{
0, // Interfaces count
NULL, // Interfaces
0, // Mediums count
NULL, // Mediums
0, // Range Count
NULL, // Ranges
KSPIN_DATAFLOW_IN, // Dataflow
KSPIN_COMMUNICATION_NONE, // Communication
&PINNAME_VIDEO_ANALOGAUDIOIN, // Category
&PINNAME_VIDEO_ANALOGAUDIOIN, // Name
0 // Reserved
},
KSPIN_FLAG_DO_NOT_USE_STANDARD_TRANSPORT, // Flags
1, // Instances Possible
0, // Instances Necessary
NULL, // Allocator Framing
NULL // IntersectHandler
},
//
// Audio Output Pin
//
{
&g_audio_pin_dispatch,
NULL,
{
NULL, // Interfaces (NULL, 0 == default)
0,
NULL, // Mediums (NULL, 0 == default)
0,
SIZEOF_ARRAY(g_audio_pin_data_ranges), // Range Count
g_audio_pin_data_ranges, // Ranges
KSPIN_DATAFLOW_OUT, // Dataflow
KSPIN_COMMUNICATION_BOTH, // Communication (both source and sink)
&PINNAME_CAPTURE, // Category
(GUID*)&PINNAME_AUDIO_OUT, // Name
0 // Reserved
},
KSPIN_FLAG_DO_NOT_INITIATE_PROCESSING | // Pin Flags
KSPIN_FLAG_FIXED_FORMAT,
1, // Instances Possible
0, // Instances Necessary
&PIN_ALLOCATOR_FRAMING, // Allocator Framing
(PFNKSINTERSECTHANDLEREX)AudioPin::static_IntersectHandler
}
};
/////////////////////////////////////////////////////////////////////////////////////////
const KSNODE_DESCRIPTOR g_audio_nodes[] =
{
{
NULL, // PKSAUTOMATION_TABLE AutomationTable;
&KSNODETYPE_DEV_SPECIFIC, // Type
NULL // Name
}
};
/////////////////////////////////////////////////////////////////////////////////////////
//
//NOTE: node 0 is the KSNODETYPE_DEV_SPECIFIC node we created above
// KSFILTER_NODE is the capture filter.
//
// This structure connects the audio in pin to the audio out pin through the custom node.
const KSTOPOLOGY_CONNECTION g_audio_topology[] =
{
//FromNode //FromNode Pin //ToNode //ToNodePin
//------------- ------------------------ -------------- ------------------------
{KSFILTER_NODE, 0,/*audio in pin*/ 0, 1 /* out pin*/ },
{0, 0,/* in pin*/ KSFILTER_NODE, 1 /*Audio out pin*/ },
};
/////////////////////////////////////////////////////////////////////////////////////////
KSFILTER_DESCRIPTOR
g_audio_filter_descriptor =
{
NULL, // Dispatch Table
NULL, // Automation Table
KSFILTER_DESCRIPTOR_VERSION, // Version
0, // Flags
&AUDIO_FILTER_REFERENCE_GUID, // Reference GUID
DEFINE_KSFILTER_PIN_DESCRIPTORS(g_audio_filter_pin_descriptors),
DEFINE_KSFILTER_CATEGORIES(g_audio_filter_categories),
DEFINE_KSFILTER_NODE_DESCRIPTORS(g_audio_nodes),
DEFINE_KSFILTER_CONNECTIONS(g_audio_topology),
NULL // Component ID
};
/////////////////////////////////////////////////////////////////////////////////////////
//***************************************************************************************
// TV Audio Filter
//***************************************************************************************
/////////////////////////////////////////////////////////////////////////////////////////
static
const
KSPIN_DESCRIPTOR_EX
TvAudioFilterPinDescriptors[] =
{
// Input pin
{
NULL, // Dispatch
NULL, // AutomationTable
{
0, // Interfaces count
NULL, // Interfaces
0, // Mediums count
NULL, // Mediums
0, // Range Count
NULL, // Ranges
KSPIN_DATAFLOW_IN, // Dataflow
KSPIN_COMMUNICATION_BOTH, // Communication
NULL, // Category
NULL, // Name
0 // Reserved
},
KSPIN_FLAG_DO_NOT_USE_STANDARD_TRANSPORT |
KSPIN_FLAG_FRAMES_NOT_REQUIRED_FOR_PROCESSING |
KSPIN_FLAG_FIXED_FORMAT, // Flags
1, // Instances Possible
1, // Instances Necessary
NULL, // Allocator Framing
NULL // IntersectHandler
},
// Output pin
{
NULL, // Dispatch
NULL, // AutomationTable
{
0, // Interfaces count
NULL, // Interfaces
0, // Mediums count
NULL, // Mediums
0, // Range Count
NULL, // Ranges
KSPIN_DATAFLOW_OUT, // Dataflow
KSPIN_COMMUNICATION_BOTH, // Communication
NULL, // Category
NULL, // Name
0 // Reserved
},
KSPIN_FLAG_DO_NOT_USE_STANDARD_TRANSPORT |
KSPIN_FLAG_FRAMES_NOT_REQUIRED_FOR_PROCESSING |
KSPIN_FLAG_FIXED_FORMAT, // Flags
1, // Instances Possible
1, // Instances Necessary
NULL, // Allocator Framing
NULL // IntersectHandler
}
};
extern
const
KSFILTER_DESCRIPTOR
TvAudioFilterDescriptor =
{
NULL, // Dispatch Table
&TvAudioFilterAutomationTable, // Automation Table
KSFILTER_DESCRIPTOR_VERSION, // Version
0, // Flags
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -