290 lines
11 KiB
C
290 lines
11 KiB
C
//==========================================================================;
|
|
//
|
|
// 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 __MPE_STREAM_H__
|
|
#define __MPE_STREAM_H__
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif // __cplusplus
|
|
|
|
|
|
// ------------------------------------------------------------------------
|
|
// Property set for all video capture streams
|
|
// ------------------------------------------------------------------------
|
|
|
|
DEFINE_KSPROPERTY_TABLE(MpeConnectionProperties)
|
|
{
|
|
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
|
|
)
|
|
};
|
|
|
|
// ------------------------------------------------------------------------
|
|
// Array of all of the property sets supported by video streams
|
|
// ------------------------------------------------------------------------
|
|
|
|
DEFINE_KSPROPERTY_SET_TABLE(MpeStreamProperties)
|
|
{
|
|
DEFINE_KSPROPERTY_SET
|
|
(
|
|
&KSPROPSETID_Connection, // Set
|
|
SIZEOF_ARRAY(MpeConnectionProperties), // PropertiesCount
|
|
MpeConnectionProperties, // PropertyItems
|
|
0, // FastIoCount
|
|
NULL // FastIoTable
|
|
),
|
|
};
|
|
|
|
|
|
#define NUMBER_MPE_STREAM_PROPERTIES (SIZEOF_ARRAY(MpeStreamProperties))
|
|
|
|
//---------------------------------------------------------------------------
|
|
// All of the video and vbi data formats we might use
|
|
//---------------------------------------------------------------------------
|
|
|
|
KSDATARANGE StreamFormatIPv4 =
|
|
{
|
|
//
|
|
// KSDATARANGE
|
|
//
|
|
sizeof (KSDATAFORMAT),
|
|
0,
|
|
4096, // sizeof a IPv4 Packet
|
|
0, // Reserved
|
|
{ STATIC_KSDATAFORMAT_TYPE_BDA_IP },
|
|
{ STATIC_KSDATAFORMAT_SUBTYPE_BDA_IP },
|
|
{ STATIC_KSDATAFORMAT_SPECIFIER_BDA_IP }
|
|
};
|
|
|
|
|
|
KSDATARANGE StreamFormatMPE =
|
|
{
|
|
sizeof (KSDATARANGE),
|
|
0,
|
|
4093, //max sizeof (MPE_BUFFER),
|
|
0, // Reserved
|
|
{ STATIC_KSDATAFORMAT_TYPE_MPE },
|
|
{ STATIC_KSDATAFORMAT_SUBTYPE_NONE },
|
|
{ STATIC_KSDATAFORMAT_SPECIFIER_NONE }
|
|
};
|
|
|
|
|
|
//---------------------------------------------------------------------------
|
|
// STREAM_Input Formats
|
|
//---------------------------------------------------------------------------
|
|
|
|
static PKSDATAFORMAT Stream0Formats[] =
|
|
{
|
|
(PKSDATAFORMAT) &StreamFormatMPE
|
|
|
|
|
|
// 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) &StreamFormatIPv4,
|
|
|
|
//
|
|
// 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 [] =
|
|
{
|
|
//
|
|
// MPE Input Stream
|
|
//
|
|
|
|
{
|
|
// 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_MPE_STREAM_PROPERTIES, // Number of stream properties
|
|
(PKSPROPERTY_SET) MpeStreamProperties, // Stream Property Array
|
|
0, // NumStreamEventArrayEntries
|
|
0, // StreamEventsArray
|
|
NULL, // Category
|
|
(GUID *)&PINNAME_MPE, // Name
|
|
0, // MediumsCount
|
|
NULL, // Mediums
|
|
},
|
|
|
|
// 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
|
|
0, // StreamHeaderMediaSpecific
|
|
0, // StreamHeaderWorkspace
|
|
TRUE, // Allocator
|
|
NULL, // HwEventRoutine
|
|
},
|
|
},
|
|
|
|
//
|
|
// IPv4 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_MPE_STREAM_PROPERTIES, // Number of stream properties
|
|
(PKSPROPERTY_SET) MpeStreamProperties, // Stream Property Array
|
|
0, // NumStreamEventArrayEntries
|
|
0, // StreamEventsArray
|
|
NULL, // Category
|
|
(GUID *)&PINNAME_IPSINK_INPUT, // Name
|
|
0, // MediumsCount
|
|
NULL, // Mediums
|
|
},
|
|
|
|
// HW_STREAM_OBJECT ------------------------------------------------
|
|
{
|
|
sizeof (HW_STREAM_OBJECT), // SizeOfThisPacket
|
|
0, // StreamNumber
|
|
(PVOID)NULL, // HwStreamExtension
|
|
ReceiveDataPacket, // HwReceiveDataPacket Handler
|
|
ReceiveCtrlPacket, // HwReceiveControlPacket Handler
|
|
{ // HW_CLOCK_OBJECT
|
|
NULL, // .HWClockFunction
|
|
0, // .ClockSupportFlags
|
|
},
|
|
FALSE, // Dma
|
|
TRUE, // Pio
|
|
(PVOID)NULL, // HwDeviceExtension
|
|
0, // StreamHeaderMediaSpecific
|
|
0, // StreamHeaderWorkspace
|
|
TRUE, // 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_RECEIVER_COMPONENT
|
|
};
|
|
|
|
#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 // __MPE_STREAM_H__
|
|
|