다음을 통해 공유


마스터 클록

미니드라이버에서는 스트림을 다른 미니드라이버에서 만든 클록과 동기화할 수 있습니다. 여러 스트림을 한 클록에 동기화할 수 있습니다. 핀이 이러한 master 클록을 사용하거나 생성하는 경우 미니드라이버에서 KSPROPERTY_STREAM_MASTERCLOCK 지원해야 합니다. 클라이언트는 이 속성을 사용하여 핀의 master 클록을 설정할 수도 있습니다. 렌더링 및 캡처 작업을 수행하는 핀은 master 클록을 자주 사용합니다. 미니 드라이버는 종료 시 클록 참조를 해제할 책임이 있습니다.

master 클록에 대한 인터페이스는 메서드, 속성 및 이벤트를 지원하는 파일 개체입니다.

파일 개체에 대한 모든 쿼리는 PASSIVE_LEVEL만 사용할 수 있습니다. 그러나 클록 위치 쿼리는 파일 개체가 유효한 한 유효한 DISPATCH_LEVEL 사용할 수 있는 직접 함수 호출 포인터를 통해 지원됩니다. 이 직접 호출은 컨텍스트 매개 변수로 클록의 파일 개체에 전달되어야 합니다.

파일 핸들은 IRP_MJ_CREATE 핀을 만드는 것과 마찬가지로 필터 핀 instance 만들기 요청을 통해 가져옵니다. 요청은 핀에 대한 파일 핸들이 만들어지는 것처럼 자체 컨텍스트 정보를 사용하여 파일 핸들을 만듭니다. 그런 다음 이 파일 핸들은 호출자에게 다시 전달되며 커널 모드 필터에 대한 master 클록을 설정하는 데 사용할 수 있습니다. 필터에 그래프의 master 클록이 할당될 때 핀 instance 부모 파일 개체를 쿼리하여 master 클록을 소유하는지 확인할 수 있습니다.

필터에 이 master 클록에 대한 파일 핸들이 제공되면 속성을 쿼리하는 데 사용할 수 있습니다. master 클록이 커널 모드 필터를 기반으로 하는 경우 master 클록의 커널 모드 부분에 대한 파일 핸들을 쿼리하는 인터페이스를 지원해야 합니다. 인터페이스가 지원되지 않는 경우 클록이 사용자 모드 기반이고 커널 모드 필터가 동기화할 수 없다고 가정합니다.

master 클록 핸들을 요청하는 DirectShow 프록시 필터는 기본 커널 모드 필터 파일 핸들에 전달합니다. 커널 모드 필터는 기본 파일 개체를 참조합니다. 필터에 이미 master 클록이 있는 경우 파일 개체를 역참조하고 새 핸들을 사용합니다. 이렇게 하려면 필터가 중지 상태여야 합니다.

master 클록 개체의 실제 시간은 하드웨어 기반이 되는 경우가 자주 있습니다. master 클록을 표시하는 필터에 실제 클록이 없으면 표시된 데이터의 타임스탬프를 기준으로 스트림 시간이 진행됩니다. 이러한 상황에서는 데이터 부족으로 인해 타임스탬프를 중지할 수 있습니다.

master 시계 뒤의 물리적 시간은 원격일 수 있으며, 이 경우 정확한 판독값을 제공하는 것은 로컬 프록시의 책임입니다. 예를 들어 프록시는 1394 연결에서 지연을 보상하거나 네트워크를 통해 지연을 평균화할 책임이 있습니다. 또한 다른 커널 필터가 동일한 1394 버스의 두 번째 디바이스에 대한 프록시인 경우 두 디바이스는 master 클록과 상호 작용하는 프라이빗 방법을 협상할 수 있습니다. 이러한 경우 디바이스는 호환성을 확인하기 위해 프라이빗 인터페이스를 사용하여 클록 유형을 결정해야 합니다.