DirectShow DirectShow 레퍼런스 DirectShow base class base class 레퍼런스 CBaseInputPin Receive [목차열람] [주소복사] [슬롯비우기] |
Microsoft DirectX 9.0 |
Receive 메서드는, 스트림내의 다음의 미디어 샘플을 받는다. 이 메서드는 IMemInputPin::Receive 메서드를 처리 한다.
구문
HRESULT Receive(
IMediaSample *pSample
);
파라미터
pSample
샘플의 IMediaSample 인터페이스의 포인터.
반환값
HRESULT 값을 돌려준다. 다음의 몇개의 값을 돌려준다.
값 | 설명 |
S_OK | 성공. |
S_FALSE | 핀은 현재 플래시중이다. 샘플은 거부되었다. |
E_POINTER | NULL 포인터 인수. |
VFW_E_INVALIDMEDIATYPE | 무효인 미디어 타입. |
VFW_E_RUNTIME_ERROR | 실행시 에러가 발생했다. |
VFW_E_WRONG_STATE | 핀은 정지하고 있다. |
주의
업 스트림의 출력 핀은 이 메서드를 호출해, 입력 핀에 샘플을 출력한다. 입력 핀은 다음의 몇개의 처리를 실행할 필요가 있다.
핀이 워커 thread를 사용해 샘플을 처리하는 경우는, 이 메서드내의 샘플에의 참조 카운트를 추가한다. 이 메서드가 돌아온 다음에, 업 스트림의 핀은 샘플을 릴리즈 한다. 샘플의 참조 카운트가 제로가 되면 샘플은 재사용을 위해서(때문에) 할당자에 되돌려진다.
이 메서드는 동기이며, 블록 할 수 있다. 메서드가 블록 했을 경우는, 핀의 CBaseInputPin::ReceiveCanBlock 메서드가 S_OK 를 돌려준다.
base class에서는, 이 메서드는 다음의 스텝을 실행한다.
포맷 변경에 대한 테스트는 다음과 같이 실시한다.
base class에서는, 이 메서드는 샘플을 처리하지 않는다. 상속 클래스로 이 메서드를 오버라이드(override) 해 처리를 실행할 필요가 있다. 처리의 내용은 필터에 완전하게 의존한다. 상속 클래스로 base class의 메서드를 호출해, 전술의 에러의 유무를 체크할 필요가 있다.
참조