CDynamicOutputPin 클래스
[이 페이지와 연결된 기능인 DirectShow는 레거시 기능입니다. MediaPlayer, IMFMediaEngine 및 Media Foundation의 오디오/비디오 캡처로 대체되었습니다. 이러한 기능은 Windows 10 및 Windows 11 최적화되었습니다. 가능한 경우 새 코드가 DirectShow 대신 Media Foundation에서 MediaPlayer, IMFMediaEngine 및 오디오/비디오 캡처를 사용하는 것이 좋습니다. 가능한 경우 레거시 API를 사용하는 기존 코드를 다시 작성하여 새 API를 사용하도록 제안합니다.]
클래스는 CDynamicOutputPin
동적 다시 연결 및 형식 변경을 지원하는 출력 핀을 구현합니다.
이 클래스는 CBaseOutputPin 클래스에서 파생되고 IPinFlowControl 인터페이스를 구현합니다. 동적 그래프 빌드에 중요한 몇 가지 작업을 지원합니다.
- 동적 다시 연결: 필터가 여전히 활성 상태인 동안 핀의 연결을 끊고 다시 연결할 수 있습니다(일시 중지 또는 실행).
- 동적 형식 변경: 필터가 활성 상태인 동안 핀은 다시 연결하지 않고 새 미디어 형식을 협상할 수 있습니다.
- 흐름 제어: 소유 필터(또는 애플리케이션)는 필터를 중지하지 않고 핀에서 데이터 흐름을 차단할 수 있습니다.
자세한 내용은 동적 그래프 빌드를 참조하세요.
핀에는 차단됨, 차단 해제 및 보류 중의 세 가지 가능한 상태가 있습니다. 보류 중인 상태에서 핀은 핀이 차단된 상태로 전환되기 전에 다른 스레드에서 일부 작업이 완료되기를 기다리고 있습니다. 핀이 차단된 동안 필터는 핀을 통해 데이터를 전달하거나 핀의 연결을 변경할 수 없습니다.
여러 스레드 간에 조정하려면 소유 필터가 특정 규칙을 따라야 합니다. (필터 그래프의 스레드에 대한 자세한 내용은 스레드 및 중요 섹션을 참조하세요.) 먼저 스트리밍 스레드는 다음 메서드를 호출하기 전에 항상 CDynamicOutputPin::StartUsingOutputPin 메서드를 호출해야 합니다.
- CDynamicOutputPin::ChangeOutputFormat
- CDynamicOutputPin::ChangeMediaType
- CDynamicOutputPin::D ynamicReconnect
- CBaseOutputPin::D eliver
- CBaseOutputPin::D eliverEndOfStream
- CBaseOutputPin::D eliverNewSegment
- IMemInputPin::Receive
- IMemInputPin::ReceiveMultiple
- IPin::EndOfStream
- IPin::NewSegment
그런 다음 CDynamicOutputPin::StopUsingOutputPin 메서드를 호출해야 합니다.
둘째, 애플리케이션 스레드는 이전 목록의 메서드를 호출해서는 안됩니다. 셋째, 스트리밍 스레드는 핀을 차단하거나 차단 해제하는 클래스 메서드를 호출해서는 안됩니다. 이러한 메서드는 CDynamicOutputPin::Block, CDynamicOutputPin::SynchronousBlockOutputPin, CDynamicOutputPin::AsynchronousBlockOutputPin 및 CDynamicOutputPin::UnblockOutputPin입니다.
이러한 규칙은 스트리밍 스레드가 핀을 사용하는 동안 애플리케이션 스레드가 핀을 차단할 수 없도록 하고 그 반대의 경우도 마찬가지입니다. 스트리밍 스레드가 StartUsingOutputPin을 호출한 후에는 스트리밍 스레드가 StopUsingOutputPin을 호출할 때까지 핀이 차단되지 않습니다. 반대로 핀이 차단되면 StartUsingOutputPin 은 핀이 차단 해제될 때까지 기다립니다.
StopUsingOutputPin을 호출하는 것을 잊어버리지 않도록 하려면 CAutoUsingOutputPin 클래스를 사용할 수 있습니다. Scope 꺼질 때 StopUsingOutputPin을 자동으로 호출합니다.
소유 필터가 IBaseFilter::JoinFilterGraph 메서드에서 필터 그래프를 조인하거나 그대로 두면 핀의 CDynamicOutputPin::SetConfigInfo 메서드를 호출해야 합니다.
보호된 멤버 변수 | Description |
---|---|
m_BlockStateLock | 차단 상태를 보호하는 중요 섹션입니다. |
m_hUnblockOutputPinEvent | 핀이 차단되지 않을 때 신호되는 이벤트입니다. |
m_hNotifyCallerPinBlockedEvent | 핀이 성공적으로 차단되거나 사용자가 보류 중인 블록을 취소할 때 신호를 수신하는 이벤트입니다. |
m_BlockState | 차단 상태. |
m_dwBlockCallerThreadID | 이 핀에서 IPinFlowControl::Block 메서드를 마지막으로 호출한 스레드의 식별자입니다. |
m_dwNumOutstandingOutputPinUsers | 이 핀을 사용하는 스트리밍 스레드 수입니다. |
m_hStopEvent | 필터가 중지되거나 핀이 데이터를 플러시할 때 신호를 보내는 이벤트입니다. |
m_pGraphConfig | 동적 다시 연결을 수행하기 위한 IGraphConfig 인터페이스에 대한 포인터입니다. |
m_bPinUsesReadOnlyAllocator | 핀 할당자의 샘플이 읽기 전용인지 여부를 지정하는 플래그입니다. |
Protected 메서드 | Description |
SynchronousBlockOutputPin | 핀을 차단합니다. 는 핀이 차단될 때까지 반환되지 않습니다. |
비동기BlockOutputPin | 핀을 차단합니다. 는 핀이 차단되기 전에 반환될 수 있습니다. |
UnblockOutputPin | 핀의 차단을 해제합니다. |
BlockOutputPin | 핀을 차단합니다. |
WaitEvent | 지정된 이벤트가 신호가 전송될 때까지 기다립니다. |
Public 메서드 | Description |
CDynamicOutputPin | 생성자 메서드입니다. |
~CDynamicOutputPin | 소멸자 메서드입니다. |
SetConfigInfo | IGraphConfig 포인터 및 중지 이벤트를 지정합니다. |
DeliverBeginFlush | 연결된 입력 핀에 플러시 작업을 시작하도록 요청합니다. |
DeliverEndFlush | 연결된 입력 핀을 요청하여 플러시 작업을 종료합니다. |
비활성 | 필터가 중지되었음을 핀에 알 수 있습니다. |
Active | 필터가 현재 활성 상태임을 핀에 알 수 있습니다. |
CompleteConnect | 입력 핀에 대한 연결을 완료합니다. 가상. |
StartUsingOutputPin | 스트리밍 작업을 위해 핀에 대한 액세스 권한을 얻습니다. 가상. |
StopUsingOutputPin | 스트리밍 작업 후 핀에 대한 액세스를 해제합니다. 가상. |
StreamingThreadUsingOutputPin | 스레드가 핀에서 스트리밍 작업을 수행하는지 여부를 확인합니다. 가상. |
ChangeOutputFormat | 연결에 대한 미디어 형식을 동적으로 변경하고 새 세그먼트 정보를 제공합니다. |
ChangeMediaType | 연결의 미디어 형식을 동적으로 변경합니다. |
DynamicReconnect | 새 미디어 형식을 사용하여 동적 다시 연결을 수행합니다. |
IPin 메서드 | Description |
연결 끊기 | 현재 핀 연결을 끊습니다. |
IPinFlowControl 메서드 | Description |
차단 | 핀에서 데이터 흐름을 차단하거나 차단 해제합니다. |
요구 사항
요구 사항 | 값 |
---|---|
헤더 |
|
라이브러리 |
|