DirectShow DirectShow 의 사용법 DirectShow 필터의 개발 필터의 접속 할당자의 조정   [목차열람] [주소복사] [슬롯비우기]
할당자의 조정
 
Microsoft DirectX 9.0

할당자의 조정

2 개의 핀이 접속 하면, 미디어 데이터를 교환하기 위한 구조가 필요하다. 이 구조는 "트랜스포트" 라고 부른다. 보통, DirectShow 아키텍처는 트랜스포트에 관해서 중립적이다. 2 개의 필터는, 양자가 지원 하는 임의의 트랜스포트 방법으로 접속하는 것에 일치할 수 있다.

가장 일반적인 트랜스포트는,"로컬 메모리" 트랜스포트이다. 이 경우, 미디어 데이터는 메인 메모리에 보관 유지된다. "푸쉬 모델" 과 "풀 모델" 이라고 하는 2 종류의 로컬 메모리 트랜스포트가 존재한다. 푸쉬 모델에서는, 소스 필터는 다운 스트림 필터의 입력 핀의 IMemInputPin 인터페이스를 사용해, 다운 스트림 필터에 데이터를 푸쉬 한다. 프르모델에서는, 다운 스트림 필터는 소스 필터의 출력 핀의 IAsyncReader 인터페이스를 사용해, 소스 필터로부터의 데이터를 요구한다. 이것들 2 개의 데이터 플로우 모델의 더 자세한 정보는, 「필터 그래프의 데이터 플로우」를 참조할것.

로컬 메모리 트랜스포트에서는,"할당자" 로 불리는 개체가 메모리 버퍼의 할당을 담당한다. 할당자는 IMemAllocator 인터페이스를 지원 한다. 양쪽 모두의 핀이 1 개의 할당자를 공유한다. 어느 쪽의 핀도 할당자를 제공할 수 있지만, 사용하는 할당자를 선택하는 것은 출력 핀이다.

출력 핀은 할당자의 프로퍼티도 설정한다. 프로퍼티에서는, 할당자로 생성 하는 버퍼수, 각 버퍼의 사이즈, 메모리의 alignment를 지정한다. 출력 핀이 버퍼 요구에 대해 입력 핀에 따르는 경우도 있다.

IMemInputPin 접속으로, 할당자의 조정은 다음과 같이 행해진다.

  1. 출력 핀이 IMemInputPin::GetAllocatorRequirements 를 호출한다 (생략 가능). 이 메서드는, 메모리 alignment 등, 입력 핀의 버퍼 요구를 얻어온다. 보통, 출력 핀은, 충분한 이유가 없는 한 입력 핀의 요구를 받아들이게 된다.
  2. 출력 핀이 IMemInputPin::GetAllocator 를 호출한다 (생략 가능). 이 메서드는, 입력 핀으로부터 할당자를 요구한다. 입력 핀은 할당자를 제공하는지, 제공할 수 없는 경우는 에러 코드를 돌려준다.
  3. 출력 핀이 할당자를 선택한다. 입력 핀으로부터 제공된 할당자를 사용하는지, 또는 독자적인 할당자를 생성 한다.
  4. 출력 핀은 IMemAllocator::SetProperties 를 호출해, 할당자 프로퍼티를 설정한다. 다만, 할당자는 요구된 프로퍼티에 따르지 않는 것이 있다. (예를 들어, 입력 핀이 할당자를 제공하는 경우에 일어난다. ) 할당자는,SetProperties 메서드의 출력 파라미터로서 실제의 프로퍼티를 돌려준다.
  5. 출력 핀이 IMemInputPin::NotifyAllocator 를 호출해, 입력 핀에 선택 결과를 통지한다.
  6. 입력 핀은 IMemAllocator::GetProperties 를 호출해, 할당자 프로퍼티가 받아들이고 가능한지 어떤지를 확인할 필요가 있다.
  7. 출력 핀은 할당자의 위탁과 데코밋트를 담당한다. 이 처리는, 스트리밍의 시작과 종료 때에 행해진다.

IAsyncReader 접속에서는, 할당자의 조정은 다음과 같이 행해진다.

  1. 입력 핀은 출력 핀의 IAsyncReader::RequestAllocator 를 호출한다. 입력 핀은 버퍼 요구를 지정한다. 또, 할당자를 제공한다 (생략 가능).
  2. 출력 핀이 할당자를 선택한다. 입력 핀으로 제공되는 할당자가 있으면, 그 할당자를 사용할 수 있다. 또, 독자적인 할당자를 생성 할 수도 있다.
  3. 출력 핀은 RequestAllocator 메서드의 출력 파라미터로서 할당자를 돌려준다. 입력 핀은 할당자 프로퍼티를 확인할 필요가 있다.
  4. 입력 핀은 할당자의 위탁과 데코밋트를 담당한다.
  5. 할당자 조정 처리중, 언제라도 어느 쪽인가의 핀의 접속에 장해가 발생할 가능성이 있다.
  6. 출력 핀이 입력 핀의 할당자를 사용하는 경우, 그 할당자는 그 입력 핀에 샘플을 송신할 경우에 밖에 사용할 수 없다. 소유하는 필터는, 다른 핀에 샘플을 송신할 경우에 그 할당자를 사용할 수 없다.

참조

↑TOP