Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Gdy urządzenie BDA zacznie działać, menedżer Plug and Play wysyła IRP_MN_START_DEVICE. Klasa AVStream z kolei wywołuje procedurę uruchamiania minidrivera BDA skojarzonego z urządzeniem BDA. Ta rutyna uruchamiania pobiera informacje o urządzeniu z rejestru, ustawia informacje o urządzeniu, a następnie wywołuje funkcję obsługi BdaCreateFilterFactory do:
Utwórz fabrykę filtrów dla urządzenia z początkowego deskryptora filtru (KSFILTER_DESCRIPTOR) dla urządzenia. Początkowy deskryptor filtru odwołuje się do tabel wysyłki i automatyzacji dla pinów filtru i wejściowych. Aby uzyskać więcej informacji, zobacz Tworzenie tabel wysyłania i definiowanie tabel automatyzacji .
Skojarz fabrykę filtrów ze strukturą BDA_FILTER_TEMPLATE . Ta struktura odwołuje się do deskryptora filtru szablonu dla urządzenia oraz do listy możliwych par wejściowych i wyjściowych pinów. Ten deskryptor i lista z kolei odwołują się do:
- Statyczne struktury szablonów, których dostawca sieci może użyć do określenia topologii filtru BDA.
- Węzły i pinezki filtru BDA wraz z możliwymi sposobami łączenia filtru.
- Procedury używane przez dostawcę sieci do tworzenia i zamykania wystąpienia filtru.
- Statyczne struktury szablonów, których dostawca sieci może używać do manipulowania filtrem BDA.
Zarejestruj statyczne struktury szablonów określone przez BDA_FILTER_TEMPLATE w bibliotece obsługi BDA, aby biblioteka mogła zapewnić domyślną obsługę właściwości i metod minidrivera BDA.
Poniższy fragment kodu przedstawia przykład początkowego deskryptora filtru dla urządzenia, które BdaCreateFilterFactory ustawia jako fabrykę filtrów:
const KSFILTER_DESCRIPTOR InitialTunerFilterDescriptor;
//
// Filter Factory Descriptor for the tuner filter
//
// This structure brings together all of the structures that define
// the tuner filter instance as it appears when it is first created.
// Note that not all template pin and node types are exposed as
// pin and node factories when the filter instance is created.
//
DEFINE_KSFILTER_DESCRIPTOR(InitialTunerFilterDescriptor)
{
&FilterDispatch, // Table of dispatch routines
&FilterAutomation, // Table of properties and methods
KSFILTER_DESCRIPTOR_VERSION, // Version
0, // Flags
&KSNAME_Filter, // Reference Guid
DEFINE_KSFILTER_PIN_DESCRIPTORS(InitialPinDescriptors),
// PinDescriptorsCount
// PinDescriptorSize
// PinDescriptors
DEFINE_KSFILTER_CATEGORY(KSCATEGORY_BDA_RECEIVER_COMPONENT),
// CategoriesCount
// Categories
DEFINE_KSFILTER_NODE_DESCRIPTORS_NULL(NodeDescriptors),
// NodeDescriptorsCount
// NodeDescriptorSize
// NodeDescriptors
DEFINE_KSFILTER_DEFAULT_CONNECTIONS, // ConnectionsCount
// Connections
NULL // ComponentId
};
Poniższy fragment kodu przedstawia przykład tablicy początkowych deskryptorów styków, które są ujawniane przez zainicjowany filtr. Dostawca sieci inicjuje filtr przy użyciu takiej tablicy, zanim dostawca sieci skonfiguruje ten filtr. Jednak podczas konfigurowania zainicjowanego filtru dostawca sieci wybiera piny, do których odwołuje się wskaźnik do członka deskryptora filtru struktury BDA_FILTER_TEMPLATE. Aby uzyskać więcej informacji, zobacz Configuring a BDA filter (Konfigurowanie filtru BDA).
//
// Initial Pin Descriptors
//
// This data structure defines the pins that will appear on the
// filter when it is first created.
//
const
KSPIN_DESCRIPTOR_EX
InitialPinDescriptors[] =
{
// Antenna Pin
//
{
&AntennaPinDispatch,
&AntennaAutomation, // AntennaPinAutomation
{
0, // Interfaces
NULL,
0, // Mediums
NULL,
SIZEOF_ARRAY(AntennaPinRanges),
AntennaPinRanges,
KSPIN_DATAFLOW_IN,
KSPIN_COMMUNICATION_BOTH,
NULL, // Name
NULL, // Category
0
},
KSPIN_FLAG_DO_NOT_USE_STANDARD_TRANSPORT |
KSPIN_FLAG_FRAMES_NOT_REQUIRED_FOR_PROCESSING |
KSPIN_FLAG_FIXED_FORMAT,
1, // InstancesPossible
0, // InstancesNecessary
NULL, // Allocator Framing
NULL // PinIntersectHandler
}
};
Należy pamiętać, że zainicjowany filtr musi mieć co najmniej jedno złącze wejściowe, aby interfejs IFilterMapper2 lub IFilterMapper programu Microsoft DirectShow mógł go zlokalizować. Zapoznaj się z dokumentacją zestawu Microsoft Windows SDK, aby uzyskać informacje na temat tych interfejsów DirectShow.
Poniższy fragment kodu przedstawia przykłady struktury BDA_FILTER_TEMPLATE oraz powiązanych struktur i tablic:
const KSFILTER_DESCRIPTOR TemplateTunerFilterDescriptor;
const BDA_PIN_PAIRING *TemplateTunerPinPairings;
//
// BDA Template Topology Descriptor for the filter factory.
//
// This structure defines the pin and node types that the network
// provider can create on the filter and how they are arranged.
//
const
BDA_FILTER_TEMPLATE
TunerBdaFilterTemplate =
{
&TemplateTunerFilterDescriptor,
SIZEOF_ARRAY(TemplateTunerPinPairings),
TemplateTunerPinPairings
};
//
// Filter Factory Descriptor for the tuner filter template topology
//
// This structure brings together all of the structures that define
// the topologies that the tuner filter can assume as a result of
// pin factory and topology creation methods.
//
DEFINE_KSFILTER_DESCRIPTOR(TemplateTunerFilterDescriptor)
{
&FilterDispatch, // Table of dispatch routines
&FilterAutomation, // Table of properties and methods
KSFILTER_DESCRIPTOR_VERSION, // Version
0, // Flags
&KSNAME_Filter, // Reference Guid
DEFINE_KSFILTER_PIN_DESCRIPTORS(TemplatePinDescriptors),
// PinDescriptorsCount
// PinDescriptorSize
// PinDescriptors
DEFINE_KSFILTER_CATEGORY(KSCATEGORY_BDA_RECEIVER_COMPONENT),
// CategoriesCount
// Categories
DEFINE_KSFILTER_NODE_DESCRIPTORS(NodeDescriptors),
// NodeDescriptorsCount
// NodeDescriptorSize
// NodeDescriptors
DEFINE_KSFILTER_CONNECTIONS(TemplateTunerConnections),
// ConnectionsCount
// Connections
NULL // ComponentId
};
//
// Lists how pairs of input and output pins are configured.
//
// Values given to the BDA_PIN_PAIRING structures in the list inform
// the network provider which nodes get duplicated when more than one
// output pin type is connected to a single input pin type or when
// more that one input pin type is connected to a single output pin
// type. Also, informs of the joints array.
//
const
BDA_PIN_PAIRING TemplateTunerPinPairings[] =
{
// Antenna to Transport Topology Joints
//
{
0, // ulInputPin
1, // ulOutputPin
1, // ulcMaxInputsPerOutput
1, // ulcMinInputsPerOutput
1, // ulcMaxOutputsPerInput
1, // ulcMinOutputsPerInput
SIZEOF_ARRAY(AntennaTransportJoints), // ulcTopologyJoints
AntennaTransportJoints // pTopologyJoints
}
};