mirror of https://github.com/tongzx/nt5src
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
430 lines
15 KiB
430 lines
15 KiB
//==========================================================================;
|
|
//
|
|
// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
|
|
// KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
|
|
// IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
|
|
// PURPOSE.
|
|
//
|
|
// Copyright (c) 1992 - 1996 Microsoft Corporation. All Rights Reserved.
|
|
//
|
|
//==========================================================================;
|
|
|
|
#ifndef __BDASTRM_H__
|
|
#define __BDASTRM_H__
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif // __cplusplus
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
//
|
|
//
|
|
DEFINE_KSPROPERTY_TABLE(IPSinkConnectionProperties)
|
|
{
|
|
DEFINE_KSPROPERTY_ITEM
|
|
(
|
|
KSPROPERTY_CONNECTION_ALLOCATORFRAMING,
|
|
TRUE, // GetSupported or Handler
|
|
sizeof(KSPROPERTY), // MinProperty
|
|
sizeof(KSALLOCATOR_FRAMING), // MinData
|
|
FALSE, // SetSupported or Handler
|
|
NULL, // Values
|
|
0, // RelationsCount
|
|
NULL, // Relations
|
|
NULL, // SupportHandler
|
|
sizeof(ULONG) // SerializedSize
|
|
),
|
|
|
|
};
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
//
|
|
//
|
|
DEFINE_KSPROPERTY_TABLE(StreamAllocatorProperties)
|
|
{
|
|
DEFINE_KSPROPERTY_ITEM_STREAM_ALLOCATOR
|
|
(
|
|
FALSE,
|
|
TRUE
|
|
)
|
|
};
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
//
|
|
//
|
|
DEFINE_KSPROPERTY_SET_TABLE(IPSinkStreamProperties)
|
|
{
|
|
DEFINE_KSPROPERTY_SET
|
|
(
|
|
&KSPROPSETID_Connection, // Set
|
|
SIZEOF_ARRAY(IPSinkConnectionProperties), // PropertiesCount
|
|
IPSinkConnectionProperties, // PropertyItems
|
|
0, // FastIoCount
|
|
NULL // FastIoTable
|
|
),
|
|
|
|
DEFINE_KSPROPERTY_SET
|
|
(
|
|
&KSPROPSETID_Stream, // Set
|
|
SIZEOF_ARRAY(StreamAllocatorProperties), // PropertiesCount
|
|
StreamAllocatorProperties, // PropertyItems
|
|
0, // FastIoCount
|
|
NULL // FastIoTable
|
|
),
|
|
|
|
};
|
|
|
|
#define NUMBER_IPSINK_STREAM_PROPERTIES (SIZEOF_ARRAY(IPSinkStreamProperties))
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
//
|
|
//
|
|
DEFINE_KSPROPERTY_TABLE(IPSinkDefaultProperties)
|
|
{
|
|
DEFINE_KSPROPERTY_ITEM
|
|
(
|
|
KSPROPERTY_IPSINK_MULTICASTLIST,
|
|
TRUE,
|
|
sizeof (KSPROPERTY),
|
|
0,
|
|
FALSE,
|
|
NULL,
|
|
0,
|
|
NULL,
|
|
NULL,
|
|
0,
|
|
),
|
|
|
|
|
|
DEFINE_KSPROPERTY_ITEM
|
|
(
|
|
KSPROPERTY_IPSINK_ADAPTER_DESCRIPTION,
|
|
TRUE,
|
|
sizeof (KSPROPERTY),
|
|
0,
|
|
FALSE,
|
|
NULL,
|
|
0,
|
|
NULL,
|
|
NULL,
|
|
0,
|
|
),
|
|
|
|
|
|
DEFINE_KSPROPERTY_ITEM
|
|
(
|
|
KSPROPERTY_IPSINK_ADAPTER_ADDRESS,
|
|
TRUE, // GetSupported or Handler
|
|
sizeof(KSPROPERTY), // MinProperty
|
|
0, // MinData
|
|
TRUE, // SetSupported or Handler
|
|
NULL, // Values
|
|
0, // RelationsCount
|
|
NULL, // Relations
|
|
NULL, // SupportHandler
|
|
0, // SerializedSize
|
|
)
|
|
};
|
|
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
//
|
|
//
|
|
DEFINE_KSPROPERTY_SET_TABLE(IPSinkCodecProperties)
|
|
{
|
|
DEFINE_KSPROPERTY_SET
|
|
(
|
|
&IID_IBDA_IPSinkControl, // Set
|
|
SIZEOF_ARRAY(IPSinkDefaultProperties), // PropertiesCount
|
|
IPSinkDefaultProperties, // PropertyItems
|
|
0, // FastIoCount
|
|
NULL // FastIoTable
|
|
|
|
),
|
|
|
|
};
|
|
|
|
#define NUMBER_IPSINK_CODEC_PROPERTIES (SIZEOF_ARRAY(IPSinkCodecProperties))
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
//
|
|
//
|
|
DEFINE_KSEVENT_TABLE(IPSinkDefaultEvents)
|
|
{
|
|
DEFINE_KSEVENT_ITEM
|
|
(
|
|
KSEVENT_IPSINK_MULTICASTLIST, // Event Id
|
|
sizeof (KSEVENTDATA), // Minimum size of event data
|
|
0, // size of extra data staorage
|
|
NULL, // Add Handler
|
|
NULL, // RemoveHandler
|
|
NULL // SupportHandler
|
|
),
|
|
DEFINE_KSEVENT_ITEM
|
|
(
|
|
KSEVENT_IPSINK_ADAPTER_DESCRIPTION, // Event Id
|
|
sizeof (KSEVENTDATA), // Minimum size of event data
|
|
0, // size of extra data staorage
|
|
NULL, // Add Handler
|
|
NULL, // RemoveHandler
|
|
NULL // SupportHandler
|
|
)
|
|
};
|
|
|
|
|
|
DEFINE_KSEVENT_SET_TABLE(IPSinkEvents)
|
|
{
|
|
DEFINE_KSEVENT_SET
|
|
(
|
|
&IID_IBDA_IPSinkEvent, // Event GUID
|
|
SIZEOF_ARRAY(IPSinkDefaultEvents), // Event count
|
|
IPSinkDefaultEvents // Event items
|
|
),
|
|
};
|
|
|
|
#define NUMBER_IPSINK_EVENTS (SIZEOF_ARRAY(IPSinkEvents))
|
|
|
|
|
|
|
|
//---------------------------------------------------------------------------
|
|
// All of the video and vbi data formats we might use
|
|
//---------------------------------------------------------------------------
|
|
|
|
KS_DATAFORMAT_IPSINK_IP StreamFormatIPSinkIP =
|
|
{
|
|
//
|
|
// KSDATARANGE
|
|
//
|
|
sizeof (KSDATAFORMAT),
|
|
0,
|
|
4096, // sizeof an MPE section
|
|
0, // Reserved
|
|
{ STATIC_KSDATAFORMAT_TYPE_BDA_IP },
|
|
{ STATIC_KSDATAFORMAT_SUBTYPE_BDA_IP },
|
|
{ STATIC_KSDATAFORMAT_SPECIFIER_BDA_IP }
|
|
};
|
|
|
|
|
|
KS_DATAFORMAT_IPSINK_IP StreamFormatNetControl =
|
|
{
|
|
//
|
|
// KSDATARANGE
|
|
//
|
|
sizeof (KSDATAFORMAT),
|
|
0,
|
|
4093, // sizeof an IP Packet
|
|
0, // Reserved
|
|
{ STATIC_KSDATAFORMAT_TYPE_BDA_IP_CONTROL },
|
|
{ STATIC_KSDATAFORMAT_SUBTYPE_BDA_IP_CONTROL },
|
|
{ STATIC_KSDATAFORMAT_SPECIFIER_NONE }
|
|
};
|
|
|
|
|
|
|
|
//---------------------------------------------------------------------------
|
|
// STREAM_Input Formats
|
|
//---------------------------------------------------------------------------
|
|
|
|
static PKSDATAFORMAT Stream0Formats[] =
|
|
{
|
|
(PKSDATAFORMAT) &StreamFormatIPSinkIP,
|
|
|
|
// Add more formats here for to mirror output formats for "passthrough" mode
|
|
// The idea is that upstream capture drivers may have done some decoding already
|
|
// or downstream drivers may wish to have the raw data without any decoding at all.
|
|
// In that case all we need to do is copy the data(if there is a pending SRB) OR
|
|
// forward the SRB to the downstream client.
|
|
};
|
|
|
|
#define NUM_STREAM_0_FORMATS (SIZEOF_ARRAY(Stream0Formats))
|
|
|
|
|
|
//---------------------------------------------------------------------------
|
|
// STREAM_Output Formats
|
|
//---------------------------------------------------------------------------
|
|
|
|
static PKSDATAFORMAT Stream1Formats[] =
|
|
{
|
|
(PKSDATAFORMAT) &StreamFormatNetControl,
|
|
|
|
//
|
|
// Add more formats here for whatever output formats are supported.
|
|
//
|
|
};
|
|
#define NUM_STREAM_1_FORMATS (SIZEOF_ARRAY (Stream1Formats))
|
|
|
|
//---------------------------------------------------------------------------
|
|
// Create an array that holds the list of all of the streams supported
|
|
//---------------------------------------------------------------------------
|
|
|
|
typedef struct _ALL_STREAM_INFO
|
|
{
|
|
HW_STREAM_INFORMATION hwStreamInfo;
|
|
HW_STREAM_OBJECT hwStreamObject;
|
|
|
|
} ALL_STREAM_INFO, *PALL_STREAM_INFO;
|
|
|
|
static ALL_STREAM_INFO Streams [] =
|
|
{
|
|
{
|
|
// HW_STREAM_INFORMATION -------------------------------------------
|
|
{
|
|
1, // NumberOfPossibleInstances
|
|
KSPIN_DATAFLOW_IN, // DataFlow
|
|
TRUE, // DataAccessible
|
|
NUM_STREAM_0_FORMATS, // NumberOfFormatArrayEntries
|
|
Stream0Formats, // StreamFormatsArray
|
|
0, // ClassReserved[0]
|
|
0, // ClassReserved[1]
|
|
0, // ClassReserved[2]
|
|
0, // ClassReserved[3]
|
|
NUMBER_IPSINK_STREAM_PROPERTIES, // Number of stream properties
|
|
(PKSPROPERTY_SET) IPSinkStreamProperties, // Stream Property Array
|
|
0, // NumStreamEventArrayEntries
|
|
0, // StreamEventsArray
|
|
NULL, // Category
|
|
(GUID*) &PINNAME_IPSINK, // Name
|
|
0, // MediumsCount
|
|
NULL, // Mediums
|
|
FALSE, // BridgeStream
|
|
0, 0 // Reserved
|
|
},
|
|
|
|
// HW_STREAM_OBJECT ------------------------------------------------
|
|
{
|
|
sizeof (HW_STREAM_OBJECT), // SizeOfThisPacket
|
|
0, // StreamNumber
|
|
(PVOID)NULL, // HwStreamExtension
|
|
ReceiveDataPacket,
|
|
ReceiveCtrlPacket,
|
|
{ // HW_CLOCK_OBJECT
|
|
NULL, // .HWClockFunction
|
|
0, // .ClockSupportFlags
|
|
},
|
|
FALSE, // Dma
|
|
TRUE, // Pio
|
|
(PVOID)NULL, // HwDeviceExtension
|
|
//sizeof (KS_VBI_FRAME_INFO), // StreamHeaderMediaSpecific
|
|
0,
|
|
0, // StreamHeaderWorkspace
|
|
FALSE, // Allocator
|
|
EventHandler, // HwEventRoutine
|
|
},
|
|
},
|
|
|
|
//
|
|
// Network Provider Control Interface Pin
|
|
//
|
|
{
|
|
// HW_STREAM_INFORMATION -------------------------------------------
|
|
{
|
|
1, // NumberOfPossibleInstances
|
|
KSPIN_DATAFLOW_OUT, // DataFlow
|
|
TRUE, // DataAccessible
|
|
NUM_STREAM_1_FORMATS, // NumberOfFormatArrayEntries
|
|
Stream1Formats, // StreamFormatsArray
|
|
0, // ClassReserved[0]
|
|
0, // ClassReserved[1]
|
|
0, // ClassReserved[2]
|
|
0, // ClassReserved[3]
|
|
NUMBER_IPSINK_STREAM_PROPERTIES, // Number of stream properties
|
|
(PKSPROPERTY_SET) IPSinkStreamProperties, // Stream Property Array
|
|
0,
|
|
0,
|
|
NULL,
|
|
(GUID *)&PINNAME_BDA_NET_CONTROL, // Name
|
|
0, // MediumsCount
|
|
NULL, // Mediums
|
|
FALSE, // BridgeStream
|
|
0, 0 // Reserved
|
|
},
|
|
|
|
// HW_STREAM_OBJECT ------------------------------------------------
|
|
{
|
|
sizeof (HW_STREAM_OBJECT), // SizeOfThisPacket
|
|
0, // StreamNumber
|
|
(PVOID)NULL, // HwStreamExtension
|
|
ReceiveDataPacket, // HwReceiveDataPacket
|
|
ReceiveCtrlPacket, // HwReceiveControlPacket
|
|
{ // HW_CLOCK_OBJECT
|
|
NULL, // .HWClockFunction
|
|
0, // .ClockSupportFlags
|
|
},
|
|
FALSE, // Dma
|
|
TRUE, // Pio
|
|
(PVOID)NULL, // HwDeviceExtension
|
|
//sizeof (KS_VBI_FRAME_INFO), // StreamHeaderMediaSpecific
|
|
0,
|
|
0, // StreamHeaderWorkspace
|
|
FALSE, // Allocator
|
|
NULL, // HwEventRoutine
|
|
},
|
|
}
|
|
};
|
|
|
|
#define DRIVER_STREAM_COUNT (SIZEOF_ARRAY (Streams))
|
|
|
|
|
|
//---------------------------------------------------------------------------
|
|
// Topology
|
|
//---------------------------------------------------------------------------
|
|
|
|
// Topology connections
|
|
|
|
KSTOPOLOGY_CONNECTION rgConnections[] =
|
|
{
|
|
{-1, 0, -1, 1}
|
|
};
|
|
|
|
// Categories define what the device does.
|
|
|
|
static GUID Categories[] =
|
|
{
|
|
STATIC_KSCATEGORY_BDA_IP_SINK
|
|
};
|
|
|
|
#define NUMBER_OF_CATEGORIES SIZEOF_ARRAY (Categories)
|
|
|
|
static KSTOPOLOGY Topology = {
|
|
NUMBER_OF_CATEGORIES,
|
|
(GUID*) &Categories,
|
|
0,
|
|
(GUID*) NULL,
|
|
1,
|
|
rgConnections,
|
|
NULL,
|
|
0
|
|
};
|
|
|
|
|
|
//---------------------------------------------------------------------------
|
|
// The Main stream header
|
|
//---------------------------------------------------------------------------
|
|
|
|
static HW_STREAM_HEADER StreamHeader =
|
|
{
|
|
DRIVER_STREAM_COUNT, // NumberOfStreams
|
|
sizeof (HW_STREAM_INFORMATION), // Future proofing
|
|
0, // NumDevPropArrayEntries set at init time
|
|
NULL, // DevicePropertiesArray set at init time
|
|
0, // NumDevEventArrayEntries;
|
|
NULL, // DeviceEventsArray;
|
|
&Topology // Pointer to Device Topology
|
|
};
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif // __cplusplus
|
|
|
|
#endif // __BDASTRM_H__
|
|
|