다음을 통해 공유


AVStream의 필터 컨트롤 뮤텍스

각 AVStream 필터 instance 연결된 필터 컨트롤 뮤텍스가 있습니다. 이 뮤텍스는 필터에서 개별 핀으로 개체 계층 구조에 대한 액세스를 동기화하는 데 사용됩니다. 필터 및 핀 생성 및 삭제는 이 뮤텍스와 동기화됩니다.

필터 컨트롤 뮤텍스가 유지되는 동안 개체 계층 구조는 특정 필터 instance 아래쪽에서 안정적으로 유지됩니다. 따라서 미니드라이버는 Ks XxxGetFirstChildXxxKs Xxx GetNextSiblingXxx 함수를 사용하여 필터 수준 아래의 개체 계층 구조를 트래버스하기 전에 필터 컨트롤 뮤텍스를 가져와야 합니다.

필터 컨트롤 뮤텍스는 상태 전환을 동기화하는 데도 사용됩니다.

AVStream은 설명자 수정을 수행할 때와 같이 계층 구조를 안정적으로 유지해야 하는 속성을 처리할 때 필터 컨트롤 뮤텍스를 가져옵니다.

각 개별 필터 아래의 개체 계층 구조에 단일 필터 컨트롤 뮤텍스가 사용됩니다. 즉, 미니드라이버가 핀 개체를 사용하여 함수를 호출할 때 핀 개체는 부모의 필터 컨트롤 뮤텍스를 사용합니다.

AVStream은 다음 미니드라이버 제공 루틴을 호출할 때 미니드라이버를 대신하여 필터 컨트롤 뮤텍스를 보유합니다.

디바이스 뮤텍스와 마찬가지로 필터 컨트롤 뮤텍스를 재귀적으로 가져오면 안 됩니다. 예를 들어 AVStream이 스레드 A의 컨텍스트에서 디스패치 만들기 를 위해 미니 드라이버에 콜백을 수행하고 나중에 미니드라이버가 스레드 A 내에서 뮤텍스를 가져오려고 하면 스레드 A 자체가 교착 상태에 빠지게 됩니다.

다음 작업 중 하나를 수행하면 교착 상태가 발생할 수 있습니다.

  • 프로세스 루틴 내에서 필터 컨트롤 뮤텍스를 가져오려고 합니다.

  • 절전 모드 또는 절전 모드 해제 콜백 내에서 필터 컨트롤 뮤텍스를 가져오려고 합니다.

필터 컨트롤 뮤텍스를 조작하려면 다음 함수를 사용합니다.

KsAcquireControl, KsFilterAcquireControl, KsPinAcquireControl, KsReleaseControl, KsFilterReleaseControl, KsPinReleaseControl