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

CDynamicOutputPin 클래스

CDynamicOutputPin 클래스는, 동적재접속과 포맷 변경을 지원 하는 출력 핀을 처리 한다.

이 클래스는 CBaseOutputPin 클래스로부터 파생해,IPinFlowControl 인터페이스를 처리 한다. 또, 동적 그래프 생성에 관한 몇개의 중요한 조작을 지원 한다.

더 자세한 정보는, 「동적 그래프 생성」을 참조할것.

이 핀은 3 개 상태를 취할 수 있다. 블록 되고 있는, 블록 해제되고 있는, 및 보류 상태이다. 보류상태는, 핀이 블록 상태가 되기 전에, 다른 thread에서의 조작이 완료하는 것을 대기하고 있는 상태이다. 핀이 블록 되고 있는 동안, 필터는 데이터를 핀으로부터 출력할 수 없는, 또는 핀의 접속을 변경할 수 없다.

오너 필터는, 복수의 thread간의 조정을 실시하기 위해서(때문에), 어느 룰에 따르지 않으면 안 된다. 필터 그래프의 thread의 더 자세한 정보는, 「thread와 크리티컬 섹션」을 참조할것. 최초로, 스트리밍 thread는, 다음의 메서드의 어느쪽이든을 호출하기 전에, 반드시CDynamicOutputPin::StartUsingOutputPin 메서드를 호출해야 한다.

그 후로,CDynamicOutputPin::StopUsingOutputPin 메서드를 호출해야 한다.

다음에, 애플리케이션 thread는 전술의 일람에 있는 어느 메서드도 호출해서는 안 된다. 또, 스트리밍 thread는, 핀을 블록 또는 블록 해제하는 클래스 메서드를 호출해서는 안 된다. 이러한 메서드에는, 이하의 메서드가 있다. CDynamicOutputPin::Block ,CDynamicOutputPin::SynchronousBlockOutputPin ,CDynamicOutputPin::AsynchronousBlockOutputPin , 및 CDynamicOutputPin::UnblockOutputPin .

이러한 룰에 의해, 스트리밍 thread가 핀을 사용하고 있을 때는, 애플리케이션 thread가 그 핀을 블록 할 수 없다 (그 역에서도 같다). 스트리밍 thread가 StartUsingOutputPin 를 호출한 후, 그 thread가 StopUsingOutputPin 를 호출할 때까지, 핀은 블록 되지 않는다. 반대로 핀이 블록 되고 있는 경우,StartUsingOutputPin 는 핀이 블록 해제될 때까지 기다린다.

StopUsingOutputPin 의 호출을 잊지 않게 하기 위해서,CAutoUsingOutputPin 클래스를 사용할 수 있다. 이 클래스는, 종료하기 전에 자동적으로 StopUsingOutputPin 를 호출한다.

오너 필터가 필터 그래프에 참가 또는 그래프로부터 멀어질 때 (필터 자신의 IBaseFilter::JoinFilterGraph 메서드내에서), 오너 필터는 핀의 CDynamicOutputPin::SetConfigInfo 메서드를 호출해야 한다.

요건

헤더 : Amfilter.h 로 선언해, Streams.h 를 인클루드 한다.

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

프로텍트 멤버 변수 설명
m_BlockStateLock 블록 상태를 보호하는 크리티컬 섹션.
m_hUnblockOutputPinEvent 핀이 블록되지 않을 때에 통지되는 이벤트.
m_hNotifyCallerPinBlockedEvent 핀의 블록이 성공했을 때, 또는 사용자가 보류 상태의 블록을 캔슬했을 때에 통지되는 이벤트.
m_BlockState 블록 상태.
m_dwBlockCallerThreadID 이 핀에 대해서 마지막에 IPinFlowControl::Block 메서드를 호출한 thread의 식별자.
m_dwNumOutstandingOutputPinUsers 이 핀을 사용하고 있는 스트리밍 thread의 수.
m_hStopEvent 필터가 정지했는지, 핀이 데이터를 플래시 했을 때에 통지되는 이벤트.
m_pGraphConfig 동적재접속을 실행하는 IGraphConfig 인터페이스의 포인터.
m_bPinUsesReadOnlyAllocator 핀의 할당자로부터의 샘플이 읽기 전용인지 아닌지를 지정하는 플래그.
프로텍트 메서드  
SynchronousBlockOutputPin 핀을 블록 한다. 핀이 블록 될 때까지 돌아오지 않는다.
AsynchronousBlockOutputPin 핀을 블록 한다. 핀이 블록 되기 전에 돌아오는 일이 있다.
UnblockOutputPin 핀을 블록 해제한다.
BlockOutputPin 핀을 블록 한다.
WaitEvent 지정한 이벤트가 통지될 때까지 대기한다.
퍼블릭 메서드  
CDynamicOutputPin 생성자 메서드.
~CDynamicOutputPin 소멸자 메서드.
SetConfigInfo IGraphConfig 포인터와 정지 이벤트를 지정한다.
DeliverBeginFlush 접속되고 있는 입력 핀에 플래시 처리의 시작을 요구한다.
DeliverEndFlush 접속되고 있는 입력 핀에 플래시 처리의 종료를 요구한다.
Inactive 필터가 정지한 것을 핀에 통지한다.
Active 필터가 현재 액티브한 것을 핀에 통지한다.
CompleteConnect 입력 핀에의 접속을 완료한다. 가상.
StartUsingOutputPin 스트리밍 처리를 위해서(때문에) 핀에의 액세스를 얻어온다. 가상.
StopUsingOutputPin 스트리밍 처리의 뒤에 핀에의 액세스를 릴리즈 한다. 가상.
StreamingThreadUsingOutputPin thread가 핀에 대해서 스트리밍 처리를 실시하고 있는지를 확인한다. 가상.
ChangeOutputFormat 접속의 미디어 타입을 동적으로 변경해, 새로운 세그먼트(segment) 정보를 출력한다.
ChangeMediaType 접속의 미디어 타입을 동적으로 변경한다.
DynamicReconnect 새로운 미디어 타입을 사용해 동적인 재접속을 실시한다.
IPin 메서드  
Disconnect 현재의 핀 접속을 해제한다.
IPinFlowControl 메서드  
Block 핀으로부터의 데이터 플로우를 블록, 또는 블록 해제한다.

↑TOP