Masteruhren

Minidriver können Datenströme mit Uhren synchronisieren, die von anderen Minitreibern erstellt wurden; Mehrere Streams können mit einer Uhr synchronisiert werden. Wenn der Pin eine solche master Uhr verwendet oder erzeugt, sollte der Minitreiber KSPROPERTY_STREAM_MASTERCLOCK unterstützen. Clients können diese Eigenschaft auch verwenden, um die master Uhr für den Pin festzulegen. Pins, die Rendering- und Aufzeichnungsvorgänge ausführen, verwenden häufig eine master Uhr. Der Minitreiber ist für die Freigabe von Zeitverweisen bei Beendigung verantwortlich.

Die Schnittstelle zu einer master Uhr ist ein Dateiobjekt, das Methoden, Eigenschaften und Ereignisse unterstützt.

Alle Abfragen für das Dateiobjekt sind nur auf PASSIVE_LEVEL verfügbar. Die Abfrage der Uhrzeitposition wird jedoch auch über einen direkten Funktionsaufrufzeiger unterstützt, der unter DISPATCH_LEVEL verfügbar ist, der gültig ist, solange das Dateiobjekt gültig ist. Dieser direkte Aufruf muss als Kontextparameter an das Dateiobjekt der Uhr übergeben werden.

Das Dateihandle wird über eine Erstellungsanforderung für eine Filternadel instance abgerufen, ähnlich wie die Pinerstellung durch IRP_MJ_CREATE erfolgt. Die Anforderung bewirkt, dass ein Dateihandle erstellt wird, genau wie ein Dateihandle für eine Pin mit eigenen Kontextinformationen erstellt wird. Dieses Dateihandle wird dann zurück an den Aufrufer übergeben und kann verwendet werden, um die master Uhr für Kernelmodusfilter festzulegen. Wenn dem Filter die master Uhr des Graphen zugewiesen wird, kann ein Pin instance das übergeordnete Dateiobjekt abfragen, um zu bestimmen, ob es die master Uhr besitzt.

Wenn ein Filter das Dateihandle für diese master Uhr erhält, kann er dann zum Abfragen von Eigenschaften verwendet werden. Wenn eine master Uhr auf einem Kernelmodusfilter basiert, muss eine Schnittstelle zum Abfragen des Dateihandles an den Kernelmodusteil der master Uhr unterstützt werden. Wenn die Schnittstelle nicht unterstützt wird, wird davon ausgegangen, dass die Uhr benutzermodusbasiert ist und Kernelmodusfilter nicht mit ihr synchronisiert werden können.

Der DirectShow-Proxyfilter, der das master Uhrhandle anfordert, übergibt es dann an das zugrunde liegende Kernelmodus-Filterdateihandle. Der Kernelmodusfilter verweist auf das zugrunde liegende Dateiobjekt. Wenn der Filter bereits über eine master Uhr verfügt, wird das Dateiobjekt dereferenziert und das neue Handle verwendet. Dazu muss sich der Filter im Status "Beenden" befinden.

Die physische Zeit auf dem master Uhrobjekts ist häufig hardwarebasiert. Wenn ein Filter, der die master Uhr darstellt, keine physische Uhr aufweist, wird die Streamzeit entsprechend den Zeitstempeln der angezeigten Daten fortgesetzt. In einer solchen Situation können Zeitstempel aufgrund fehlender Daten beendet werden.

Die physische Zeit hinter der master Uhr kann remote sein. In diesem Fall liegt es in der Verantwortung des lokalen Proxys, genaue Messwerte bereitzustellen. Der Proxy ist z. B. dafür verantwortlich, die Verzögerung über eine 1394-Verbindung zu kompensieren oder die Verzögerung im Durchschnitt über ein Netzwerk hinweg zu verteilen. Wenn ein anderer Kernelfilter ein Proxy für ein zweites Gerät auf demselben 1394-Bus ist, können die beiden Geräte möglicherweise eine private Methode der Interfacing mit der master Uhr aushandeln. In diesem Fall müssen die Geräte private Schnittstellen verwenden, um den Uhrtyp zu bestimmen, um die Kompatibilität zu überprüfen.