CBaseAllocator 클래스

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

cbaseallocator 클래스 계층 구조

CBaseAllocator 클래스는 할당자를 구현하는 추상 기본 클래스입니다. 할당자는 IMemAllocator 인터페이스를 노출합니다.

할당자는 메모리 버퍼를 할당하는 개체입니다. 할당자는 사용 가능한 버퍼 목록을 유지 관리합니다. 클라이언트(일반적으로 필터)가 버퍼를 요청하면 할당자는 목록에서 버퍼를 검색합니다. 클라이언트는 버퍼를 데이터로 채우고 버퍼를 다른 개체에 전달할 수 있습니다. 결국 버퍼가 해제되고 할당자는 버퍼를 사용 가능한 버퍼 목록으로 반환합니다.

각 버퍼는 미디어 샘플이라는 개체에 의해 캡슐화됩니다. 미디어 샘플은 COM(구성 요소 개체 모델) 프레임워크 내의 메모리 블록에 대한 포인터를 패키지하는 방법입니다. 미디어 샘플은 IMediaSample 인터페이스를 노출하고 CMediaSample 클래스를 사용하여 구현됩니다. 미디어 샘플에는 IMediaSample::GetPointer 메서드를 호출하여 액세스할 수 있는 연결된 버퍼에 대한 포인터가 포함되어 있습니다. 자세한 내용은 샘플 및 할당자를 참조하세요.

이 클래스를 사용하려면 다음 단계를 수행합니다.

  1. CBaseAllocator::SetProperties 메서드를 호출하여 버퍼 수와 각 버퍼의 크기를 포함하여 버퍼 요구 사항을 지정합니다.
  2. CBaseAllocator::Commit 메서드를 호출하여 버퍼를 할당합니다.
  3. CBaseAllocator::GetBuffer 메서드를 호출하여 미디어 샘플을 검색합니다. 이 메서드는 다음 샘플을 사용할 수 있게 될 때까지 차단합니다.
  4. 각 샘플을 완료하면 샘플에서 IUnknown::Release 메서드를 호출합니다. 참조 수가 0에 도달하면 샘플이 삭제되지 않습니다. 대신 샘플은 할당자의 무료 목록으로 돌아갑니다.
  5. 할당자 사용이 완료되면 CBaseAllocator::D ecommit 메서드를 호출하여 버퍼에 대한 메모리를 해제합니다.

Commit 메서드는 버퍼에 대한 메모리를 할당하는 가상 메서드 CBaseAllocator::Alloc를 호출합니다. Decommit 메서드는 메모리를 해제하는 순수 가상 메서드 CBaseAllocator::Free를 호출합니다. 파생 클래스는 이러한 두 메서드를 재정의해야 합니다.

CMemAllocator 기본 클래스는 CBaseAllocator에서 파생됩니다. 필터 기본 클래스는 CMemAllocator 클래스를 사용합니다.

보호된 멤버 변수 Description
m_lFree 사용 가능한(무료) 미디어 샘플 목록에 대한 포인터입니다.
m_hSem 샘플을 사용할 수 있게 되면 신호되는 세마포입니다.
m_lWaiting 샘플을 기다리는 스레드 수입니다.
m_lCount 제공할 버퍼 수입니다.
m_lAllocated 현재 할당된 버퍼 수입니다.
m_lSize 각 버퍼의 크기입니다.
m_lAlignment 각 버퍼의 맞춤입니다.
m_lPrefix 각 버퍼의 접두사입니다.
m_bChanged 버퍼 요구 사항이 변경되었는지 여부를 나타내는 플래그입니다.
m_bCommitted 할당자가 커밋되었는지 여부를 나타내는 플래그입니다.
m_bDecommitInProgress 커밋 해제 작업이 진행 중인지 여부를 나타내는 플래그입니다.
m_pNotify 샘플이 릴리스될 때 호출되는 콜백 인터페이스에 대한 포인터입니다.
m_fEnableReleaseCallback 릴리스 콜백을 사용할 수 있는지 여부를 나타내는 플래그입니다.
Protected 메서드 Description
Alloc 버퍼에 대한 메모리를 할당합니다. 가상.
Public 메서드 Description
CBaseAllocator 생성자 메서드입니다.
~ CBaseAllocator 소멸자 메서드입니다.
SetNotify 사용되지 않습니다.
GetFreeCount 사용하지 않는 미디어 샘플의 수를 검색합니다.
NotifySample 샘플을 기다리는 모든 스레드를 해제합니다.
SetWaiting 대기 중인 스레드 수를 증분합니다.
순수 가상 메서드 Description
Free 모든 버퍼 메모리를 해제합니다.
IMemAllocator 메서드 Description
SetProperties 할당할 버퍼 수와 각 버퍼의 크기를 지정합니다.
GetProperties 할당자가 만들 버퍼 수와 버퍼 속성을 검색합니다.
Commit 버퍼에 대한 메모리를 할당합니다.
커밋 해제 버퍼를 커밋 해제합니다.
GetBuffer 버퍼가 포함된 미디어 샘플을 검색합니다.
ReleaseBuffer 무료 미디어 샘플 목록에 미디어 샘플을 반환합니다.

요구 사항

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

추가 정보

사용자 지정 할당자 제공