다음을 통해 공유


COutputQueue 클래스

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

coutputqueue

클래스는 COutputQueue 미디어 샘플을 배달하는 큐를 구현합니다.

이 클래스를 사용하면 출력 핀이 샘플을 비동기적으로 제공할 수 있습니다. 샘플은 큐에 배치되고 작업자 스레드는 입력 핀에 전달합니다. 큐는 새 세그먼트, 스트림 종료 알림 또는 플러시 작업을 나타내는 제어 메시지를 저장할 수도 있습니다.

이 클래스를 사용하려면 필터의 모든 출력 핀에 대해 COutputQueue 개체를 만듭니다. 생성자 메서드에서 해당 출력 핀에 연결된 입력 핀을 지정합니다. 출력 핀은 이 클래스를 사용하여 입력 핀에서 직접 메서드를 호출하지 않습니다. 대신 다음 표와 같이 에서 COutputQueue해당 메서드를 호출합니다.

Pin 메서드 COutputQueue 메서드
IPin::BeginFlush BeginFlush
IPin::EndFlush EndFlush
IPin::EndOfStream EOS
IPin::NewSegment NewSegment
IMemInputPin::Receive 수신
IMemInputPin::ReceiveMultiple ReceiveMultiple

필요에 따라 작업자 스레드 없이 샘플을 동기적으로 제공하도록 개체를 구성할 COutputQueue 수 있습니다. 또한 개체는 입력 핀의 특성에 따라 작업자 스레드를 사용할지 여부를 런타임에 결정할 수도 있습니다. 자세한 내용은 COutputQueue::COutputQueue를 참조하세요.

보호된 멤버 변수 Description
m_pPin 입력 핀의 IPin 인터페이스에 대한 포인터입니다.
m_pInputPin 입력 핀의 IMemInputPin 인터페이스에 대한 포인터입니다.
m_bBatchExact 개체가 정확한 일괄 처리로 샘플을 제공하는지 여부를 지정하는 플래그입니다.
m_lBatchSize 일괄 처리 크기입니다.
m_List 미디어 샘플 큐.
m_hSem 스레드에서 샘플을 기다리는 데 사용하는 세마포에 대한 핸들입니다.
m_evFlushComplete 플러시 작업이 완료되면 신호를 보내는 이벤트입니다.
m_hThread 작업자 스레드에 대한 핸들입니다.
m_ppSamples COutputQueue::m_lBatchSize 크기의 샘플 배열입니다.
m_nBatched 현재 일괄 처리되고 처리 대기 중인 샘플의 수입니다.
m_lWaiting 스레드가 샘플을 대기할 때 0이 아닌 값을 갖는 플래그입니다.
m_bFlushing 개체가 플러시 작업을 수행하는지 여부를 지정하는 플래그입니다.
m_bTerminate 스레드를 종료할지 여부를 지정하는 플래그입니다.
m_bSendAnyway 일괄 처리를 재정의하는 플래그입니다.
m_hr 개체가 샘플을 허용할지 여부를 나타내는 HRESULT 값입니다.
m_hEventPop 개체가 큐에서 샘플을 제거할 때마다 신호를 전송하는 이벤트입니다.
Protected 메서드 Description
InitialThreadProc 스레드를 만들 때 COutputQueue::ThreadProc 메서드를 호출합니다.
ThreadProc 큐에서 샘플을 검색하고 입력 핀에 전달합니다.
IsQueued 개체가 작업자 스레드를 사용하여 샘플을 제공하는지 여부를 확인합니다.
QueueSample 미디어 샘플 또는 제어 메시지를 큐에 대기합니다.
IsSpecialSample 대기 중인 데이터가 제어 메시지인지 여부를 확인합니다.
FreeSamples 보류 중인 모든 샘플을 해제합니다.
NotifyThread 큐에 데이터가 포함되어 있음을 스레드에 알 수 있습니다.
Public 메서드 Description
COutputQueue 생성자 메서드입니다.
~COutputQueue 소멸자 메서드입니다.
BeginFlush 플러시 작업을 시작합니다.
EndFlush 플러시 작업을 종료합니다.
EOS 입력 핀에 스트림 종료 호출을 전달합니다.
SendAnyway 보류 중인 샘플을 배달합니다.
NewSegment 입력 핀에 새 세그먼트를 전달합니다.
수신 입력 핀에 미디어 샘플을 전달합니다.
ReceiveMultiple 입력 핀에 미디어 샘플 일괄 처리를 제공합니다.
다시 설정 더 많은 데이터를 받을 수 있도록 개체를 다시 설정합니다.
IsIdle 개체가 데이터를 기다리고 있는지 여부를 확인합니다.
SetPopEvent 개체가 큐에서 샘플을 제거할 때마다 신호가 전송되는 이벤트를 지정합니다.

요구 사항

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