Source code of Windows XP (NT5)
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

//==========================================================================;
//
// 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__