Compartir a través de


Arquitectura de unidad de extensión Plug-In

El controlador USB Video Class expone unidades de extensión como nodos en el filtro proxy USB Video KS. Los controles de la unidad de extensión se exponen aún más en modo de usuario como un conjunto de propiedades en el nodo, que es de tipo "KSNODETYPE_DEV_SPECIFIC". El GUID del conjunto de propiedades coincide con el GUID del descriptor de unidad de extensión.

Los controles de unidad de extensión individuales deben numerarse continuamente de 1 a un valor máximo n. Estos controles se asignan directamente a identificadores de propiedad (IDs) en el conjunto de propiedades de la unidad de extensión y se pueden acceder a ellos mediante solicitudes KSPROPERTY estándar a través de IKsControl.

En respuesta a las solicitudes de propiedad de las aplicaciones, el controlador UVC devuelve valores de propiedad que tienen el miembro MembersFlags de la estructura KSPROPERTY_MEMBERSHEADER establecido exclusivamente en KSPROPERTY_MEMBER_RANGES. UVC no admite intervalos escalonados ni valores predeterminados de unidad de extensión de longitud arbitraria.

Para exponer las propiedades de unidad de extensión a una aplicación, puede escribir un archivo DLL de complemento en modo de usuario que exponga una API COM. Para implementar esta API, realice solicitudes al conjunto de propiedades KS mediante la interfaz IKsControl . Vidcap.ax carga automáticamente el complemento de interfaz de nodo en función de determinadas entradas del Registro. Una aplicación puede acceder a la interfaz mediante IKsTopologyInfo::CreateNodeInstance seguida de una llamada a QueryInterface en el objeto node para obtener la API COM necesaria.

Los siguientes elementos son necesarios para escribir y usar un complemento de unidad de extensión:

Los ejemplos de código de esta sección muestran todos estos elementos. Consulte Creación del control de ejemplo de unidad de extensión para obtener información sobre cómo compilar el complemento de ejemplo y el código de aplicación de ejemplo asociado.

Una vez registrado el archivo DLL del complemento y se proporcionan las entradas del Registro descritas anteriormente, Vidcap.ax carga automáticamente las interfaces de nodo pertinentes cuando se crea la instancia de nodo.

Nota A partir de Windows XP SP2, el conjunto de propiedades unidad de extensión solo se admite en el nodo y no en el filtro.

Consideraciones sobre el Registro

Para registrar el IID y CLSID de la interfaz exportada por el complemento, puede usar el registro dll o un archivo de información de configuración (INF) específico del dispositivo.

Consulte Entrada de registro de ejemplo para unidades de extensión UVC para obtener un archivo .rgs de ejemplo que muestra los valores necesarios para las entradas del Registro. En este tema también se muestra cómo escribir un archivo INF específico del dispositivo para instalar un dispositivo de vídeo USB y registrar el archivo DLL del complemento. Puede elegir el registro de DLL o un archivo INF específico del dispositivo, en función de sus necesidades específicas.

Esquema

En el siguiente diagrama esquemático se muestran las relaciones entre los distintos módulos implicados en la escritura y el uso de un complemento de unidad de extensión. En concreto, realiza un seguimiento de la conexión desde la aplicación, al archivo DLL del complemento, hasta el controlador y, por último, a la unidad de extensión en el propio dispositivo. En el esquema también se muestran los distintos GUID implicados; Los valores idénticos se resaltan mediante el uso de un color coincidente.

diagrama que ilustra el complemento de unidad de extensión y los módulos asociados.

Mecanismos de gestión de eventos

La clase de vídeo USB admite eventos de actualización automática, donde el dispositivo notifica al controlador host de cambios en cualquiera de sus controles. El controlador microsoft USB Video Class admite este concepto al permitir que las aplicaciones se registren para eventos de actualización automática. El proceso de obtención de actualizaciones implica tres pasos:

  1. Registro para eventos de actualización mediante KSEVENTSETID_VIDCAPNotify::KSEVENT_VIDCAP_AUTO_UPDATE

  2. Escucha de eventos en el identificador de eventos de notificación

  3. Cancelación de la notificación cuando haya terminado