COutputQueue 클래스
[이 페이지와 연결된 기능인 DirectShow는 레거시 기능입니다. MediaPlayer, IMFMediaEngine 및 Media Foundation의 오디오/비디오 캡처로 대체되었습니다. 이러한 기능은 Windows 10 및 Windows 11 최적화되었습니다. 가능한 경우 새 코드가 DirectShow 대신 Media Foundation에서 MediaPlayer, IMFMediaEngine 및 오디오/비디오 캡처를 사용하는 것이 좋습니다. 가능한 경우 레거시 API를 사용하는 기존 코드를 다시 작성하여 새 API를 사용하도록 제안합니다.]
클래스는 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 | 개체가 큐에서 샘플을 제거할 때마다 신호가 전송되는 이벤트를 지정합니다. |
요구 사항
요구 사항 | 값 |
---|---|
헤더 |
|
라이브러리 |
|