Freigeben über


Masteruhren

Minidriver können Datenströme mit Uhren synchronisieren, die von anderen Minidrivern erstellt wurden; Mehrere Datenströme können mit einer Uhr synchronisiert werden. Wenn der Pin einen solchen Master Clock verwendet oder erzeugt, sollte der Minidriver KSPROPERTY_STREAM_MASTERCLOCK unterstützen. Clients können diese Eigenschaft auch verwenden, um die Masteruhr für den Pin festzulegen. Pins, die Rendering- und Aufnahmevorgänge ausführen, verwenden häufig eine Masteruhr. Der Minidriver ist für die Freigabe von Zeitgeber-Referenzen nach Beendigung verantwortlich.

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

Alle Abfragen für das Dateiobjekt sind nur bei PASSIVE_LEVEL verfügbar. Die Taktpositionsabfrage wird jedoch auch über einen direkten Funktionsaufrufzeiger unterstützt, der bei 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 Filter-Pin-Instanz abgerufen, ähnlich wie der Pin durch IRP_MJ_CREATE erstellt wird. Die Anforderung bewirkt, dass ein Dateihandle erstellt wird, genauso wie ein Dateihandle für einen Pin erstellt wird, jeweils mit eigenen Kontextinformationen. Dieses Dateihandle wird dann wieder an den Aufrufer übergeben und kann verwendet werden, um die Masteruhr für Kernelmodusfilter festzulegen. Wenn dem Filter die Masteruhr des Diagramms zugewiesen wird, kann eine Pininstanz das übergeordnete Dateiobjekt abfragen, um festzustellen, ob er die Masteruhr besitzt.

Wenn einem Filter das Dateihandle für diese Masteruhr zugewiesen wird, kann er dann zum Abfragen von Eigenschaften verwendet werden. Wenn eine Masteruhr auf einem Kernel-Mode-Filter basiert, muss sie eine Schnittstelle zum Abfragen des Dateihandles für den Kernel-Mode-Teil der Masteruhr unterstützen. Wenn die Schnittstelle nicht unterstützt wird, wird davon ausgegangen, dass die Uhr benutzermodusbasiert ist, und Kernelmodusfilter können nicht mit ihr synchronisiert werden.

Der DirectShow-Proxyfilter, der das Masteruhrhandle anfordert, übergibt ihn dann an den zugrunde liegenden Kernelmodus-Filterdateihandle. Der Kernelmodusfilter verweist auf das zugrunde liegende Dateiobjekt. Wenn der Filter bereits über eine Masteruhr verfügte, dereferenziert er das Dateiobjekt und verwendet das neue Handle. Dazu muss sich der Filter im Status "Stopp" befinden.

Die physische Zeit des Masteruhrobjekts ist häufig hardwarebasiert. Wenn ein Filter, der die Masteruhr darstellt, keine physische Uhr aufweist, wird die Datenstromzeit entsprechend den Zeitstempeln der dargestellten Daten vorangebracht. In einer solchen Situation können Zeitstempel aufgrund eines Mangels an Daten beendet werden.

Die physikalische Zeit hinter der Masteruhr kann entfernt sein, in diesem Fall liegt es in der Verantwortung des lokalen Proxy, genaue Messwerte bereitzustellen. Der Proxy hat beispielsweise die Verantwortung, die Verzögerung über eine 1394-Verbindung hinweg auszugleichen oder die Verzögerung über ein Netzwerk hinweg zu verglichen. Wenn ein anderer Kernelfilter als Proxy für ein zweites Gerät auf demselben 1394-Bus fungiert, können die beiden Geräte eine private Methode zum Schnittstellen mit der Masteruhr aushandeln. In diesem Fall müssen die Geräte private Schnittstellen verwenden, um den Takttyp zu ermitteln, um die Kompatibilität zu überprüfen.