CaptureGraphBuilder를 사용하여 렌더링되는 자체 소스 필터로 구성된 DirectShow 그래프가 있습니다. 미리보기 모드에서 그래프의 결과는 [소스] -> [스마트 티] - (미리보기) -> [디코더] -> [렌더러]입니다. 자체 필터에는 맞춤 할당자가 있으며 SmartTee에이를 알립니다. 지금 종료하면 모든 오브젝트가 해제됩니다.사용자 지정 원본과 SmartTee 누수 사이에 필터 삽입 COM 개체
이제 우리는 우리 자신의 소스 필터와 SmartTee 필터 사이에 필터를 삽입하려고합니다. 새롭게 작성된 필터를 소스 필터에 접속하면, 소스 필터에 새로운 할당자가 작성됩니다. SmartTee 필터에 새로운 필터 (출력 핀 자체에 맞춤 할당기를 제안 할 것임)를 연결할 때 SmartTee는 소스와 SmartTee 간의 첫 번째 연결에서 생성 된 할당자를 제안합니다. 그러나 SmartTee는 BreakConnect 때문에이 할당자를 제거해야합니다. 이제 응용 프로그램을 종료하면 첫 번째 연결에서 작성된 할당자인 하나의 나머지 소스 할당 자 객체가 생성됩니다.
삽입 된 필터와 함께 삽입 필터에는 출력 핀에 할당자를 제안하는 InitAllocator 함수가 있습니다.
내가 해봤지만, 비디오 렌더러가 제안한 할당자를 재정의하지 않으면 작동한다. (이 할당 자 협상은 사용자 정의 기본 클래스에서 수행된다.) 하지만 슬프게도 이것은 미리보기 모드에서만 작동합니다. 캡처 및 미리보기의 경우 누수가 제거되지 않습니다. –
할당 자 내부에 누수가있을 수 있습니다. – VuVirt
물론, ref 카운트가 0에 도달 할 때 할당자가 해제되지 않기 때문에 물론. –