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