Condividi tramite


Orologi master

I minidriver possono sincronizzare i flussi con gli orologi creati da altri minidriver; è possibile sincronizzare più flussi con un orologio. Se il pin usa o produce tale orologio master, il minidriver deve supportare KSPROPERTY_STREAM_MASTERCLOCK. I client possono anche utilizzare questa proprietà per impostare l'orologio master per il pin. I pin che eseguono operazioni di rendering e acquisizione usano spesso un orologio master. Il minidriver è responsabile del rilascio dei riferimenti di clock al termine.

L'interfaccia di un orologio master è un oggetto file che supporta metodi, proprietà ed eventi.

Tutte le query sull'oggetto file sono disponibili solo in PASSIVE_LEVEL. Tuttavia, la query relativa alla posizione dell'orologio è supportata anche tramite un puntatore di chiamata di funzione diretta disponibile in DISPATCH_LEVEL, valido purché l'oggetto file sia valido. Questa chiamata diretta deve essere passata all'oggetto file dell'orologio come parametro di contesto.

L'handle di file viene acquisito tramite una richiesta di creazione in un'istanza del pin di filtro, in quanto la creazione del pin viene eseguita da IRP_MJ_CREATE. La richiesta fa sì che venga creato un handle di file, proprio come viene creato un handle di file in un pin, con le proprie informazioni di contesto. Questo handle di file viene quindi passato di nuovo al chiamante e può essere usato per impostare l'orologio master per i filtri in modalità kernel. Al momento dell'assegnazione del filtro all'orologio master del grafo, un'istanza del pin può eseguire una query sull'oggetto file padre per determinare se è proprietario dell'orologio master.

Quando un filtro viene assegnato all'handle di file per questo orologio master, può quindi essere usato per eseguire query sulle proprietà. Se un orologio master è basato su un filtro in modalità kernel, deve supportare un'interfaccia per eseguire una query sull'handle di file nella parte in modalità kernel dell'orologio master. Se l'interfaccia non è supportata, si presuppone che l'orologio sia basato sulla modalità utente e che i filtri in modalità kernel non possano eseguire la sincronizzazione.

Il filtro proxy DirectShow che richiede l'handle dell'orologio master quindi lo passa all'handle di file di filtro in modalità kernel sottostante. Il filtro in modalità kernel fa riferimento all'oggetto file sottostante. Se il filtro dispone già di un orologio master, dereferenzia l'oggetto file e usa il nuovo handle. A tale scopo, il filtro deve essere in stato Di arresto.

L'ora fisica nell'oggetto orologio master è spesso basata su hardware. Se un filtro che presenta l'orologio master non ha un orologio fisico, l'ora del flusso procede in base ai timestamp dei dati presentati. In una situazione di questo tipo, i timestamp possono interrompersi a causa di una mancanza di dati.

L'ora fisica dietro l'orologio master può essere remota, nel qual caso è responsabilità del proxy locale fornire letture accurate. Ad esempio, il proxy ha la responsabilità di compensare il ritardo tra una connessione 1394 o la media del ritardo in una rete. Inoltre, se un altro filtro kernel è un proxy per un secondo dispositivo nello stesso bus 1394, i due dispositivi possono negoziare un metodo privato di interfacciarsi con l'orologio master. In tal caso, i dispositivi devono usare interfacce private per determinare il tipo di orologio per verificare la compatibilità.