📄 strminfo.cpp
字号:
}
},
// -----------------------------------------------------------------
// The Video Port VBI output stream
// -----------------------------------------------------------------
{
// HW_STREAM_INFORMATION -------------------------------------------
{
1, // NumberOfPossibleInstances
KSPIN_DATAFLOW_OUT, // DataFlow
TRUE, // DataAccessible.
NUM_VPVBI_STREAM_FORMATS, // NumberOfFormatArrayEntries
VPVBIStreamFormats, // StreamFormatsArray
0, // ClassReserved[0]
0, // ClassReserved[1]
0, // ClassReserved[2]
0, // ClassReserved[3]
NumVideoPortVBIProperties, // NumStreamPropArrayEntries
(PKSPROPERTY_SET)VideoPortVBIProperties,// StreamPropertiesArray
SIZEOF_ARRAY(VPVBIEventSet), // NumStreamEventArrayEntries
VPVBIEventSet, // StreamEventsArray
&VPVBIPinName, // Category
&VPVBIPinName, // Name
0, // MediumsCount
NULL, // Mediums
},
// STREAM_OBJECT_INFO ------------------------------------------------
{
FALSE, // Dma
FALSE, // Pio
0, // StreamHeaderMediaSpecific
0, // StreamHeaderWorkspace
FALSE, // Allocator
VPVBIStreamEventProc, // HwEventRoutine;
}
},
// -----------------------------------------------------------------
// The Analog Video Input Stream
// -----------------------------------------------------------------
{
// HW_STREAM_INFORMATION -------------------------------------------
{
1, // NumberOfPossibleInstances
KSPIN_DATAFLOW_IN, // DataFlow
TRUE, // DataAccessible
NUM_ANALOG_VIDEO_FORMATS, // NumberOfFormatArrayEntries
AnalogVideoFormats, // StreamFormatsArray
0, // ClassReserved[0]
0, // ClassReserved[1]
0, // ClassReserved[2]
0, // ClassReserved[3]
0, // NumStreamPropArrayEntries
0, // StreamPropertiesArray
0, // NumStreamEventArrayEntries;
0, // StreamEventsArray;
&AnalogVideoStreamPinName, // Category
&AnalogVideoStreamPinName, // Name
1, // MediumsCount
&CrossbarMediums[3], // Mediums
},
// STREAM_OBJECT_INFO ------------------------------------------------
{
FALSE, // Dma
TRUE, // Pio
0, // StreamHeaderMediaSpecific
0, // StreamHeaderWorkspace
FALSE, // Allocator
NULL, // HwEventRoutine
},
}
};
extern const ULONG NumStreams = SIZEOF_ARRAY(Streams);
//---------------------------------------------------------------------------
// Topology
//---------------------------------------------------------------------------
// Categories define what the device does.
static GUID Categories[] = {
STATIC_KSCATEGORY_VIDEO,
STATIC_KSCATEGORY_CAPTURE,
STATIC_KSCATEGORY_CROSSBAR,
};
#define NUMBER_OF_CATEGORIES SIZEOF_ARRAY (Categories)
KSTOPOLOGY Topology = {
NUMBER_OF_CATEGORIES, // CategoriesCount
(GUID*) &Categories, // Categories
0, // TopologyNodesCount
NULL, // TopologyNodes
0, // TopologyConnectionsCount
NULL, // TopologyConnections
NULL, // TopologyNodesNames
0, // Reserved
};
/*
** AdapterCompareGUIDsAndFormatSize()
**
** Checks for a match on the three GUIDs and FormatSize
**
** Arguments:
**
** IN DataRange1
** IN DataRange2
** BOOL fCompareFormatSize - TRUE when comparing ranges
** - FALSE when comparing formats
**
** Returns:
**
** TRUE if all elements match
** FALSE if any are different
**
** Side Effects: none
*/
BOOL AdapterCompareGUIDsAndFormatSize(
IN PKSDATARANGE DataRange1,
IN PKSDATARANGE DataRange2,
BOOL fCompareFormatSize
)
{
return (
IsEqualGUID (
DataRange1->MajorFormat,
DataRange2->MajorFormat) &&
IsEqualGUID (
DataRange1->SubFormat,
DataRange2->SubFormat) &&
IsEqualGUID (
DataRange1->Specifier,
DataRange2->Specifier) &&
(fCompareFormatSize ?
(DataRange1->FormatSize == DataRange2->FormatSize) : TRUE));
}
/*
** AdapterVerifyFormat()
**
** Checks the validity of a format request by walking through the
** array of supported KSDATA_RANGEs for a given stream.
**
** Arguments:
**
** pKSDataFormat - pointer of a KSDATAFORMAT structure.
** StreamNumber - index of the stream being queried / opened.
**
** Returns:
**
** TRUE if the format is supported
** FALSE if the format cannot be suppored
**
** Side Effects: none
*/
BOOL AdapterVerifyFormat(PKSDATAFORMAT pKSDataFormatToVerify, int StreamNumber)
{
BOOL fOK = FALSE;
ULONG j;
ULONG NumberOfFormatArrayEntries;
PKSDATAFORMAT *pAvailableFormats;
//
// Check that the stream number is valid
//
if (StreamNumber >= NumStreams) {
TRAP();
return FALSE;
}
NumberOfFormatArrayEntries =
Streams[StreamNumber].hwStreamInfo.NumberOfFormatArrayEntries;
//
// Get the pointer to the array of available formats
//
pAvailableFormats = Streams[StreamNumber].hwStreamInfo.StreamFormatsArray;
DBGINFO(("AdapterVerifyFormat, Stream=%d\n", StreamNumber));
DBGINFO(("FormatSize=%d\n",
pKSDataFormatToVerify->FormatSize));
DBGINFO(("MajorFormat=%x\n",
pKSDataFormatToVerify->MajorFormat));
//
// Walk the formats supported by the stream
//
for (j = 0; j < NumberOfFormatArrayEntries; j++, pAvailableFormats++) {
// Check for a match on the three GUIDs and format size
if (!AdapterCompareGUIDsAndFormatSize(
pKSDataFormatToVerify,
*pAvailableFormats,
FALSE /* CompareFormatSize */)) {
continue;
}
//
// Now that the three GUIDs match, switch on the Specifier
// to do a further type-specific check
//
// -------------------------------------------------------------------
// Specifier FORMAT_VideoInfo for VIDEOINFOHEADER
// -------------------------------------------------------------------
if (IsEqualGUID (pKSDataFormatToVerify->Specifier,
KSDATAFORMAT_SPECIFIER_VIDEOINFO)) {
PKS_DATAFORMAT_VIDEOINFOHEADER pDataFormatVideoInfoHeader =
(PKS_DATAFORMAT_VIDEOINFOHEADER) pKSDataFormatToVerify;
PKS_VIDEOINFOHEADER pVideoInfoHdrToVerify =
(PKS_VIDEOINFOHEADER) &pDataFormatVideoInfoHeader->VideoInfoHeader;
PKS_DATARANGE_VIDEO pKSDataRangeVideo = (PKS_DATARANGE_VIDEO) *pAvailableFormats;
KS_VIDEO_STREAM_CONFIG_CAPS *pConfigCaps = &pKSDataRangeVideo->ConfigCaps;
//
// Perform some verification tests here!!!
//
fOK = TRUE;
break;
} // End of VIDEOINFOHEADER specifier
// -------------------------------------------------------------------
// Specifier FORMAT_VideoInfo for VBIINFOHEADER
// -------------------------------------------------------------------
if (IsEqualGUID (pKSDataFormatToVerify->Specifier,
KSDATAFORMAT_SPECIFIER_VBI)) {
//
// Perform some verification tests here!!!
//
fOK = TRUE;
break;
} // End of VBI specifier
// -------------------------------------------------------------------
// Specifier FORMAT_AnalogVideo for KS_ANALOGVIDEOINFO
// -------------------------------------------------------------------
else if (IsEqualGUID (pKSDataFormatToVerify->Specifier,
KSDATAFORMAT_SPECIFIER_ANALOGVIDEO)) {
//
// Perform some verification tests here!!!
//
fOK = TRUE;
break;
} // End of KS_ANALOGVIDEOINFO specifier
// -------------------------------------------------------------------
// Specifier STATIC_KSDATAFORMAT_TYPE_VIDEO for Video Port
// -------------------------------------------------------------------
else if (IsEqualGUID (pKSDataFormatToVerify->Specifier,
KSDATAFORMAT_SPECIFIER_NONE) &&
IsEqualGUID (pKSDataFormatToVerify->SubFormat, KSDATAFORMAT_SUBTYPE_VPVideo)) {
//
// Perform some verification tests here!!!
//
fOK = TRUE;
break;
} // End of Video port section
// -------------------------------------------------------------------
// Specifier KSDATAFORMAT_SPECIFIER_NONE for VP VBI
// -------------------------------------------------------------------
else if (IsEqualGUID (pKSDataFormatToVerify->Specifier,
KSDATAFORMAT_SPECIFIER_NONE) &&
IsEqualGUID (pKSDataFormatToVerify->SubFormat, KSDATAFORMAT_SUBTYPE_VPVBI)) {
//
// Perform some verification tests here!!!
//
fOK = TRUE;
break;
} // End of VP VBI section
} // End of loop on all formats for this stream
return fOK;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -