DirectShow DirectShow 레퍼런스 DirectShow base class base class 레퍼런스 CDynamicOutputPin [목차열람] [주소복사] [슬롯비우기] |
Microsoft DirectX 9.0 |
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 | 핀으로부터의 데이터 플로우를 블록, 또는 블록 해제한다. |