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.
Los minidrivers pueden sincronizar flujos con los relojes creados por otros minidrivers; varios flujos se pueden sincronizar con un reloj. Si el pin usa o genera un reloj maestro de este tipo, el minidriver debe admitir KSPROPERTY_STREAM_MASTERCLOCK. Los clientes también pueden usar esta propiedad para establecer el reloj maestro del pin. Los pines que realizan operaciones de renderizado y captura usan con frecuencia un reloj maestro. El minidriver es responsable de liberar referencias de reloj tras la finalización.
La interfaz de un reloj maestro es un objeto de archivo que admite métodos, propiedades y eventos.
Todas las consultas del objeto de archivo solo están disponibles en PASSIVE_LEVEL. Sin embargo, la consulta de la posición del reloj también se admite mediante un puntero de llamada a función directa, el cual está disponible en DISPATCH_LEVEL y es considerado válido siempre que el objeto de archivo también lo sea. Esta llamada directa debe pasarse al objeto de archivo del reloj como parámetro de contexto.
El identificador de archivo se obtiene a través de una solicitud de creación en una instancia de pin de filtro, de manera similar a como se realiza la creación de pines mediante IRP_MJ_CREATE. La solicitud hace que se cree un manejador de archivo, al igual que se crea un manejador de archivo para un pin, con su propia información de contexto. A continuación, este identificador de archivo se devuelve al autor de la llamada y se puede usar para establecer el reloj maestro para los filtros en modo kernel. En el momento en que se asigna el filtro al reloj maestro del grafo, una instancia de pin puede consultar el objeto de archivo primario para determinar si posee el reloj maestro.
Cuando un filtro recibe el identificador de archivo para este reloj maestro, se puede usar para consultar las propiedades. Si un reloj maestro está basado en un filtro del modo kernel, debe soportar una interfaz que permita consultar el descriptor de archivo de la parte de reloj maestro del modo kernel. Si no se admite la interfaz, se supone que el reloj está basado en modo de usuario y que los filtros en modo kernel no se pueden sincronizar con él.
El filtro proxy DirectShow que solicita el identificador de reloj maestro lo pasa a su identificador de archivo de filtro en modo kernel subyacente. El filtro en modo kernel hace referencia al objeto de archivo subyacente. Si el filtro ya tenía un reloj maestro, desreferencia el objeto de archivo y usa el nuevo identificador. Para ello, el filtro debe estar en estado Detener.
La hora física del objeto de reloj maestro se basa con frecuencia en hardware. Si un filtro que presenta el reloj maestro no tiene ningún reloj físico, el tiempo del flujo progresa según las marcas de tiempo de los datos presentados. En tal situación, las marcas de tiempo pueden detenerse debido a la falta de datos.
El tiempo físico detrás del reloj maestro puede ser remoto, en cuyo caso es responsabilidad del proxy local proporcionar lecturas precisas. Por ejemplo, el proxy tiene la responsabilidad de compensar el retraso a través de una conexión 1394, o de promediar el retraso en una red. Además, si algún otro filtro de kernel es un proxy para un segundo dispositivo en el mismo bus de 1394, los dos dispositivos pueden negociar un método privado de interacción con el reloj maestro. En tal caso, los dispositivos deben usar interfaces privadas para determinar el tipo de reloj para comprobar la compatibilidad.