次の方法で共有


BDA ミニドライバーの初期化

BDA ミニドライバーは、他の AVStream ミニドライバーと同様に初期化されます。 BDA ミニドライバーの DriverEntry 関数は、AVStream KsInitializeDriver 関数を呼び出して、BDA ミニドライバーのドライバー オブジェクトを初期化します。 この呼び出しでは、BDA ミニドライバーは、次のようなデバイスの特性を指定する KSDEVICE_DESCRIPTOR 構造体へのポインターを渡します。

  • BDA デバイスの ディスパッチ テーブルを含む KSDEVICE_DISPATCH 構造体へのポインター。 少なくとも、BDA ミニドライバーは、デバイスを作成して起動し、KSDEVICE_DISPATCH 構造体の Add メンバーと Start メンバーでこれらのルーチンを指定するルーチンを提供する必要があります。 BDA ミニドライバーの作成ルーチンは、デバイス クラスのメモリを割り当て、BDA デバイスの KSDEVICE 構造体へのポインターをこのデバイス クラスに参照する必要があります。 BDA ミニドライバーの開始ルーチンは、レジストリからデバイスに関する情報を取得し、デバイスに関する情報を設定してから、BDA サポート ライブラリに静的テンプレート構造のグループを登録する必要があります。 詳細については、「BDA ミニドライバーの起動」を参照してください。

  • このデバイスでサポートされている個々のフィルターの種類の KSFILTER_DESCRIPTOR 構造体の配列。 この構造体の種類は、特定のフィルター ファクトリによって作成されたフィルターの特性を記述します。 BDA ミニドライバーのプロパティとメソッド セットを処理するために BDA サポート ライブラリ (Bdasup.lib) を使用しないように BDA ミニドライバーを作成する場合は、この配列でこの型の構造体のメンバーを指定する必要があります。 BDA サポート ライブラリを使用するように BDA ミニドライバーを作成する場合、BDA ミニドライバーは代わりに BdaCreateFilterFactory サポート関数を呼び出して、デバイスのフィルター ファクトリ記述子 (KSFILTER_DESCRIPTOR 構造体) を追加する必要があります。 詳細については、「BDA ミニドライバーの起動」を参照してください。

次のコード スニペットは、フィルター記述子の配列、BDA デバイスのディスパッチ テーブル、および BDA デバイスの記述子の例を示しています。

//
//  Array containing descriptors for all filter factories
//  available on the device.
//
//  Note!  Only used when dynamic topology is not used (that is, 
//         only when filters and pins are fixed). Typically, this 
//         is when the network provider is not present.
//
DEFINE_KSFILTER_DESCRIPTOR_TABLE(FilterDescriptors)
{
    &TemplateTunerFilterDescriptor
};
//
//  Device Dispatch Table
//
//  Lists the dispatch routines for the major events related to 
//  the underlying device.
//
extern
const
KSDEVICE_DISPATCH
DeviceDispatch =
{
    CDevice::Create,    // Add
    CDevice::Start,     // Start
    NULL,               // PostStart
    NULL,               // QueryStop
    NULL,               // CancelStop
    NULL,               // Stop
    NULL,               // QueryRemove
    NULL,               // CancelRemove
    NULL,               // Remove
    NULL,               // QueryCapabilities
    NULL,               // SurpriseRemoval
    NULL,               // QueryPower
    NULL                // SetPower
};
//
//  Device Descriptor
//
//  Brings together the data structures that define the device and
//  the initial filter factories that can be created on it.
//  Note that because template topology structures are specific 
//  to BDA, the device descriptor does not include them.
//  Note also that if BDA dynamic topology is used, the device 
//  descriptor does not specify a list of filter factory descriptors.
//  If BDA dynamic topology is used, the BDA minidriver calls 
//  BdaCreateFilterFactory to add filter factory descriptors. 
extern
const
KSDEVICE_DESCRIPTOR
DeviceDescriptor =
{
    &DeviceDispatch,    // Dispatch
#ifdef DYNAMIC_TOPOLOGY // network provider is present
    0,    // FilterDescriptorsCount
    NULL, // FilterDescriptors
#else     // network provider is not present
    SIZEOF_ARRAY( FilterDescriptors), // FilterDescriptorsCount
    FilterDescriptors                 // FilterDescriptors
#endif // DYNAMIC_TOPOLOGY