다음을 통해 공유


CDynamicOutputPin 클래스

[이 페이지와 연결된 기능인 DirectShow는 레거시 기능입니다. MediaPlayer, IMFMediaEngine 및 Media Foundation의 오디오/비디오 캡처로 대체되었습니다. 이러한 기능은 Windows 10 및 Windows 11 최적화되었습니다. 가능한 경우 새 코드가 DirectShow 대신 Media Foundation에서 MediaPlayer, IMFMediaEngine오디오/비디오 캡처를 사용하는 것이 좋습니다. 가능한 경우 레거시 API를 사용하는 기존 코드를 다시 작성하여 새 API를 사용하도록 제안합니다.]

클래스는 CDynamicOutputPin 동적 다시 연결 및 형식 변경을 지원하는 출력 핀을 구현합니다.

이 클래스는 CBaseOutputPin 클래스에서 파생되고 IPinFlowControl 인터페이스를 구현합니다. 동적 그래프 빌드에 중요한 몇 가지 작업을 지원합니다.

  • 동적 다시 연결: 필터가 여전히 활성 상태인 동안 핀의 연결을 끊고 다시 연결할 수 있습니다(일시 중지 또는 실행).
  • 동적 형식 변경: 필터가 활성 상태인 동안 핀은 다시 연결하지 않고 새 미디어 형식을 협상할 수 있습니다.
  • 흐름 제어: 소유 필터(또는 애플리케이션)는 필터를 중지하지 않고 핀에서 데이터 흐름을 차단할 수 있습니다.

자세한 내용은 동적 그래프 빌드를 참조하세요.

핀에는 차단됨, 차단 해제 및 보류 중의 세 가지 가능한 상태가 있습니다. 보류 중인 상태에서 핀은 핀이 차단된 상태로 전환되기 전에 다른 스레드에서 일부 작업이 완료되기를 기다리고 있습니다. 핀이 차단된 동안 필터는 핀을 통해 데이터를 전달하거나 핀의 연결을 변경할 수 없습니다.

여러 스레드 간에 조정하려면 소유 필터가 특정 규칙을 따라야 합니다. (필터 그래프의 스레드에 대한 자세한 내용은 스레드 및 중요 섹션을 참조하세요.) 먼저 스트리밍 스레드는 다음 메서드를 호출하기 전에 항상 CDynamicOutputPin::StartUsingOutputPin 메서드를 호출해야 합니다.

그런 다음 CDynamicOutputPin::StopUsingOutputPin 메서드를 호출해야 합니다.

둘째, 애플리케이션 스레드는 이전 목록의 메서드를 호출해서는 안됩니다. 셋째, 스트리밍 스레드는 핀을 차단하거나 차단 해제하는 클래스 메서드를 호출해서는 안됩니다. 이러한 메서드는 CDynamicOutputPin::Block, CDynamicOutputPin::SynchronousBlockOutputPin, CDynamicOutputPin::AsynchronousBlockOutputPinCDynamicOutputPin::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
차단 핀에서 데이터 흐름을 차단하거나 차단 해제합니다.

요구 사항

요구 사항
헤더
Amfilter.h(Streams.h 포함)
라이브러리
Strmbase.lib(소매 빌드);
Strmbasd.lib(디버그 빌드)