Arquitectura de unidad de extensión Plug-In
El controlador de clase de vídeo USB expone unidades de extensión como nodos en el filtro de proxy DE vídeo KS USB. Los controles de unidad de extensión se exponen aún más en modo de usuario como una propiedad establecida 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 (ID) en el conjunto de propiedades de unidad de extensión y se puede 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 de KSPROPERTY_MEMBERSHEADER establecida 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 la unidad de extensión en 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:
Un encabezado y un archivo cpp que implementan la API de unidad de extensión y una interfaz denominada IKsNodeControl. Vidcap.ax usa la interfaz IKsNodeControl para informar al complemento del identificador del nodo de extensión y proporcionarle una instancia de IKsControl. El código de ejemplo de estos archivos se puede encontrar en archivo DLL de complemento de unidad de extensión de ejemplo.
Archivo .rgs que registra las interfaces de nodo e identificadores de clase (CLSID) en la subclave HKLM\System\CCS\Control\NodeInterfaces\Property_Set_GUID subclave del Registro. Las entradas de esta subclave del Registro contienen los valores binarios para el id. de interfaz (IID) y CLSID. Para obtener más información, vea Entrada del Registro de ejemplo para unidades de extensión UVC.
Una aplicación que invoca esta interfaz. La aplicación crea primero una instancia de nodo con el identificador de nodo correcto mediante IKsTopologyInfo::CreateNodeInstance. A continuación, la aplicación llama a QueryInterface en la instancia del nodo para obtener la interfaz de unidad de extensión necesaria. Para obtener más información, vea Aplicación de ejemplo para unidades de extensión UVC y Admitir eventos de actualización automática con unidades de extensión.
En los ejemplos de código de esta sección se 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 del 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 muestre 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 diagrama esquema siguiente 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. El esquematico también ilustra los distintos GUID implicados; Los valores idénticos se resaltan mediante el uso de un color coincidente.
Mecanismos 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 de clase de vídeo USB de Microsoft 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:
Registro para eventos de actualización mediante KSEVENTSETID_VIDCAPNotify::KSEVENT_VIDCAP_AUTO_UPDATE
Escucha de eventos en el identificador de eventos de notificación
Cancelación de la notificación cuando haya terminado