DirectShow DirectShow 레퍼런스 DirectShow base class base class 레퍼런스 CTransInPlaceFilter   [목차열람] [주소복사] [슬롯비우기]
CTransInPlaceFilter 클래스
 
Microsoft DirectX 9.0

CTransInPlaceFilter 클래스

CTransInPlaceFilter 클래스의 계층

CTransInPlaceFilter 클래스는, 데이터를 버퍼간에 복사 하지 않고 입력 데이터를 수정하는, 인 플레이스 변환 필터용으로 설계되고 있다. 이 클래스를 사용하려면 ,CTransInPlaceFilter 로부터 새로운 클래스를 파생해, 이하의 메서드를 처리 하는 것.

이 필터는 입력 핀에 CTransInPlaceInputPin 클래스를 사용해, 출력 핀에 CTransInPlaceOutputPin 클래스를 사용한다. 보통, 이러한 핑크 라스를 오버라이드(override) 할 필요는 없다. 필터는 CTransInPlaceFilter::GetPin 메서드내에서 양쪽 모두의 핀을 생성 한다. 핑크 라스를 오버라이드(override) 하는 경우는,GetPin 를 오버라이드(override) 해 커스텀 핀을 생성 해야 한다.

이 클래스는, 입력 타입이 항상 출력 타입과 일치하도록(듯이) 설계되고 있다. 필터는, 가능한 한 양쪽 모두의 핀 접속에 1 개의 할당자를 사용한다.

우선되는 미디어 타입

출력 핀이 이미 접속되고 있는 경우는, 입력 핀이 다운 스트림 필터의 우선 타입을 제공한다. (실제, 단지 다운 스트림 필터의 열거자 개체를 돌려준다. ) 그 이외의 경우는, 우선 타입을 가지지 않는다. 출력 핀은, 역의 케이스로 같은 동작을 한다. 입력 핀이 이미 접속되고 있는 경우는, 출력 핀이 업 스트림 필터의 우선 타입을 제공한다. 그 이외의 경우는, 우선 타입을 가지지 않는다.

핀 접속

1 개의 핀이 접속하고 있는 경우, 보통은, 양쪽 모두의 핀이 같은 미디어 타입과 같은 할당자를 사용하도록, 필터가 다른 핀도 재접속한다. (핀의 재접속의 메카니즘에 대해서는, 「핀의 재접속」을 참조할것. ) 입력 핀이 최초로 접속하는 경우와 출력 핀이 최초로 접속하는 경우와 2 종류의 시나리오가 생각된다.

입력 핀이 최초로 접속 하면 한다. 다음의 스텝이 발생한다.

  1. 입력 핀이 필터의 CheckInputType 메서드를 호출해, 미디어 타입을 확인한다.
  2. 업 스트림 필터가 할당자를 선택한다. 이 시점에서, 입력 핀에는 할당자 조건은 없고, 어느 할당자에서도 접속에 사용할 수 있다. 업 스트림 필터가 할당자를 요구 하면, 핀이 새로운 할당자를 생성 한다. 다음에 말하는 것 같은 이유에 의해, 이 할당자는 최종적인 접속에서는 사용되지 않는다. 이것은, 접속 처리의 이 단계를 완료시키기 (위해)때문에인 만큼 제공된다.

다음에 출력 핀이 접속되면 다음 일이 실행된다.

  1. 출력 핀이 필터의 CheckInputType 메서드를 호출해, 미디어 타입을 확인한다. 또, 업 스트림 필터로 IPin::QueryAccept 를 호출한다. 이것에 의해, 입력 핀이 미디어 타입을 일치하도록(듯이) 변경할 수 있다.
  2. 출력 핀이 할당자를 선택한다. 다운 스트림 필터에 할당자를 요구하지만, 업 스트림 접속의 할당자 프로퍼티를 사용한다.
  3. 필터는, 출력 핀의 미디어 타입을 사용해, 입력 핀을 재접속한다.
  4. 이번은 입력 핀의 GetAllocator 메서드가 다운 스트림 할당자를 돌려주어,GetAllocatorRequirements 가 다운 스트림 필터의 할당자 조건을 돌려준다. 입력 핀은, 업 스트림 필터가 선택한 할당자가 무엇으로 있어도 받아들인다.
  5. 필터는, 다운 스트림 접속에 같은 할당자를 사용한다.

여기서, 출력 핀이 최초로 접속되는 이제 한편의 시나리오에 대해 생각한다.

  1. 출력 핀이 필터의 CheckInputType 메서드를 호출해, 미디어 타입을 확인한다.
  2. 할당자를 선택한다. 이 때, 다운 스트림 필터의 할당자의 사용을 우선한다.

그 후, 입력 핀이 접속되면 다음 일이 실행된다.

  1. 입력 핀은, 필터로 CheckInputType 를, 다운 스트림 필터로 QueryAccept 를 호출해 미디어 타입을 체크한다.
  2. 입력 타입이 출력 타입에 일치하지 않는 경우는, 필터는 출력 핀을 재접속한다.
  3. 업 스트림 필터가 할당자를 선택한다. 입력 핀의 GetAllocator 메서드가 다운 스트림 할당자를 돌려준다. 입력 핀은, 업 스트림 필터가 선택한 할당자가 무엇으로 있어도 받아들인다.
  4. 필터는, 다운 스트림 접속에 같은 할당자를 사용한다. 오리지날의 다운 스트림 할당자를 오버라이드(override) 하는 경우도 있다.

다운 스트림 할당자는 쓰기 가능하지 않으면 안 되기 때문에, 관여하는 할당자의 1 개에서도 읽기 전용의 경우는, 이 이벤트의 순서는 약간 다르다. 이 경우, 필터는, 개별의 2 개의 할당자를 사용한다.

요건

헤더 : Transip.h 내에서 선언해, Streams.h 를 인클루드 한다.

라이브러리 : Strmbase.lib (리테일 빌드) 또는 Strmbasd.lib (디버그 빌드)를 사용한다.

프로텍트 메서드  
Copy 미디어 샘플을 복사 한다.
InputPin 필터의 입력 핀의 포인터를 얻어온다.
OutputPin 필터의 출력 핀의 포인터를 얻어온다.
TypesMatch 입력 미디어 타입이 출력 미디어 타입과 일치할지 어떨지를 조사한다.
UsingDifferentAllocators 입력 핀과 출력 핀이 다른 할당자를 사용하고 있는지를 조사한다.
퍼블릭 메서드  
CTransInPlaceFilter 생성자 메서드.
GetPin 핀을 얻어온다.
GetMediaType 출력 핀용의 우선 미디어 타입을 얻어온다.
DecideBufferSize 출력 핀의 버퍼 요구를 설정한다.
CheckTransform 입력 미디어 타입이 출력 미디어 타입과 호환성이 있을지 어떨지를 체크한다.
CompleteConnect 핀 접속을 완료한다.
Receive 미디어 샘플을 받아, 그것을 처리해, 다운 스트림 필터에 출력한다.
순수 가상 메서드  
Transform 샘플을 인 플레이스로 변환한다.

↑TOP