Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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:
Un archivo de encabezado y cpp que implementa la API de unidad de extensión y una interfaz denominada IKsNodeControl. Vidcap.ax usa la interfaz IKsNodeControl para informar al complemento del identificador de nodo de extensión y proporcionarle una instancia de IKsControl. El código de ejemplo de estos archivos se puede encontrar en el archivo DLL del complemento de unidad de extensión de ejemplo.
Un archivo .rgs que registra las interfaces de nodo y los identificadores de clase (CLSID) en la subclave HKLM\System\CCS\Control\NodeInterfaces\Property_Set_GUID del Registro. Las entradas de esta subclave del Registro contienen los valores binarios del id. de interfaz (IID) y CLSID. Para obtener más información, consulte Sample Registry Entry for UVC Extension Units (Entrada de 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, consulte Aplicación de ejemplo para unidades de extensión UVC y compatibilidad con eventos de actualización automática con unidades 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.
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:
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