ミニドライバーは、他のミニドライバーによって作成されたクロックにストリームを同期できます。複数のストリームを 1 クロックに同期できます。 ピンがこのような マスター クロックを使用または生成する場合、ミニドライバーは KSPROPERTY_STREAM_MASTERCLOCKをサポートする必要があります。 クライアントは、このプロパティを使用して、ピンのマスター クロックを設定することもできます。 レンダリングおよびキャプチャ操作を実行するピンでは、マスター クロックが頻繁に使用されます。 ミニドライバーは、終了時にクロック参照を解放する役割を担います。
マスター クロックへのインターフェイスは、メソッド、プロパティ、およびイベントをサポートするファイル オブジェクトです。
ファイル オブジェクトに対するすべてのクエリは、PASSIVE_LEVELでのみ使用できます。 ただし、クロック位置クエリは、DISPATCH_LEVELで使用できる直接関数呼び出しポインターによってもサポートされます。これは、ファイル オブジェクトが有効である限り有効です。 この直接呼び出しは、コンテキスト パラメーターとしてクロックのファイル オブジェクトに渡す必要があります。
ファイル ハンドルは、ピンの作成がIRP_MJ_CREATEによって行われるのと同様に、フィルター ピン インスタンスの作成要求を通じて取得されます。 リクエストにより、ピンへのファイルハンドルがその独自のコンテキスト情報とともに作成されるのと同様に、ファイルハンドルが作成されます。 このファイル ハンドルは呼び出し元に渡され、カーネル モード フィルターのマスター クロックを設定するために使用できます。 フィルターがグラフのマスター クロックに割り当てられている時点で、ピン インスタンスは親ファイル オブジェクトに対してクエリを実行して、マスター クロックを所有しているかどうかを判断できます。
このマスター クロックに対してファイル ハンドルがフィルターに与えられると、そのフィルターを使用してプロパティのクエリを実行できます。 マスター クロックがカーネル モード フィルターに基づいている場合は、マスター クロックのカーネル モード部分に対してファイル ハンドルを照会するインターフェイスをサポートする必要があります。 インターフェイスがサポートされていない場合は、クロックがユーザー モード ベースであり、カーネル モード フィルターが同期できないと見なされます。
マスター クロック ハンドルを要求する DirectShow プロキシ フィルターは、基になるカーネル モード フィルター ファイル ハンドルに渡します。 カーネル モード フィルターは、基になるファイル オブジェクトを参照します。 フィルターに既にマスター クロックがある場合は、ファイル オブジェクトを逆参照し、新しいハンドルを使用します。 これを行うには、フィルターが Stop 状態である必要があります。
マスター クロック オブジェクトの物理時間は、多くの場合、ハードウェア ベースです。 マスター クロックを表示するフィルターに物理クロックがない場合は、表示されるデータのタイムスタンプに従ってストリーム時間が進行します。 このような状況では、データがないためにタイムスタンプが停止する可能性があります。
マスター クロックの背後にある物理的な時間はリモートである可能性があります。その場合、正確な読み取り値を提供するのはローカル プロキシの役割です。 たとえば、プロキシは、1394 接続全体の遅延を補正したり、ネットワーク全体の遅延を平均したりする必要があります。 さらに、他のカーネル フィルターが同じ 1394 バス上の 2 つ目のデバイスのプロキシである場合、2 つのデバイスは、マスター クロックとやり取りするプライベートメソッドをネゴシエートできます。 このような場合、デバイスは、互換性を確認するために、プライベート インターフェイスを使用してクロックの種類を決定する必要があります。