DirectShow DirectShow 레퍼런스 DirectShow base class base class 레퍼런스 CBaseAllocator   [목차열람] [주소복사] [슬롯비우기]
CBaseAllocator 클래스
 
Microsoft DirectX 9.0

CBaseAllocator 클래스

CBaseAllocator 클래스의 계층

The CBaseAllocator 클래스는, 할당자를 처리 하는 추상 base class이다. 할당자는 IMemAllocator 인터페이스를 공개한다.

allocator 는 메모리 버퍼를 할당하는 개체이다. 할당자는 사용 가능한 버퍼의 리스트를 보관 유지한다. 클라이언트 (일반적으로는 필터)가 버퍼를 요구 하면, 할당자는 리스트로부터 버퍼를 얻어온다. 클라이언트는 버퍼에 데이터를 저장 한다. 버퍼를 다른 개체에 건네주는 경우도 있다. 최종적으로 버퍼는 릴리즈 되어 할당자는 릴리즈 된 버퍼를 사용 가능한 버퍼의 리스트에 되돌린다.

각 버퍼는미디어 샘플을 호출하는 개체에 의해 캡슐화된다. 미디어 샘플은 COM (Component Object Model) 프레임워크(framework)를 사용해 포인터를 메모리 블록에 패키지 하는 1 개의 방법이다. 미디어 샘플은 IMediaSample 인터페이스를 공개해,CMediaSample 클래스를 사용해 처리 된다. 미디어 샘플은,IMediaSample::GetPointer 의 호출에 의해 액세스 할 수 있는 관련지을 수 있었던 버퍼의 포인터를 포함한다. 더 자세한 정보는, 「샘플과 할당자」를 참조할것.

이 클래스를 사용하려면 , 다음의 스텝을 실행한다.

  1. CBaseAllocator::SetProperties 메서드를 호출해, 버퍼의 수와 각 버퍼의 사이즈를 포함한 버퍼 요구를 지정한다.
  2. CBaseAllocator::Commit 메서드를 호출해, 버퍼를 할당한다.
  3. CBaseAllocator::GetBuffer 메서드를 호출해, 미디어 샘플을 얻어온다. 이 메서드는 다음 샘플이 사용 가능하게 될 때까지 블록 한다.
  4. 각 샘플에서의 처리가 종료하면 샘플에 대해서 IUnknown::Release 메서드를 호출한다. 샘플은 그 참조 카운트가 제로가 되어도 삭제되지 않는다. 대신에, 샘플은 할당자의 면세표에 되돌려진다.
  5. 할당자를 다 사용했으면,CBaseAllocator::Decommit 메서드를 호출해 버퍼용의 메모리를 릴리즈 한다.

Commit 메서드는 버퍼의 메모리를 할당하는 가상 메서드 CBaseAllocator::Alloc 를 호출한다. Decommit 메서드는 메모리를 릴리즈 하는 순수 가상 메서드 CBaseAllocator::Free 를 호출한다. 상속 클래스에서는 이 2 개의 메서드를 오버라이드(override) 해야 한다.

CMemAllocator base class는 CBaseAllocator 로부터 파생한다. 필터 base class는 CMemAllocator 클래스를 사용한다.

요건

헤더: Amfilter.h 로 선언해, Streams.h 를 인클루드 한다.

라이브러리: Strmbase.lib (리테일 빌드) 또는 Strmbasd.lib (디버그 빌드).

프로텍트 멤버 변수  
m_lFree 사용 가능한 (프리의) 미디어 샘플의 리스트의 포인터.
m_hSem 샘플이 사용 가능한 때 신호를 받는 semaphore.
m_lWaiting 샘플을 기다리고 있는 thread의 수.
m_lCount 제공하는 버퍼의 수.
m_lAllocated 현재 할당할 수 있는 버퍼의 수.
m_lSize 각 버퍼의 사이즈.
m_lAlignment 각 버퍼의 alignment.
m_lPrefix 각 버퍼의 프레픽스.
m_bChanged 버퍼 요구가 변경되었는지 어떠했는지를 나타내는 플래그.
m_bCommitted 할당자가 위탁되고 있는지를 나타내는 플래그.
m_bDecommitInProgress 데코밋트 처리가 진행중인지 아닌지를 나타내는 플래그.
m_pNotify 샘플이 릴리즈 되었을 때에 불려 가는 콜백 인터페이스의 포인터.
m_fEnableReleaseCallback 릴리즈 콜백이 유효한가 어떤가를 나타내는 플래그.
프로텍트 메서드  
Alloc 버퍼에 메모리를 할당한다. 가상.
퍼블릭 메서드  
CBaseAllocator 생성자(constructor) 메서드.
~CBaseAllocator 소멸자 메서드.
SetNotify 사용되지 않았다.
GetFreeCount 사용되지 않은 미디어 샘플의 수를 얻어온다.
NotifySample 샘플을 기다리고 있는 thread를 릴리즈 한다.
SetWaiting 대기 상태의 thread의 수를 인크리먼트(increment) 한다.
순수 가상 메서드  
Free 모든 버퍼 메모리를 릴리즈 한다.
IMemAllocator 메서드  
SetProperties 할당하는 버퍼의 수와 각 버퍼의 사이즈를 지정한다.
GetProperties 할당자가 생성 하는 버퍼의 수와 버퍼의 프로퍼티를 얻어온다.
Commit 버퍼에 메모리를 할당한다.
Decommit 버퍼를 데코밋트 한다.
GetBuffer 버퍼를 포함한 미디어 샘플을 얻어온다.
ReleaseBuffer 프리 미디어 샘플의 리스트에 미디어 샘플을 돌려준다.

↑TOP