CMemAllocator Class

CMemAllocator class hierarchy

The CMemAllocator class provides support for IMemAllocator by using the new operator to allocate memory. Derived from CBaseAllocator, it overrides the CBaseAllocator::Alloc member function to allocate a single block of memory large enough to hold all the requested data areas, and then allocates (using the new operator) a CMediaSample object for each requested buffer pointing into the data area.

The CBaseInputPin and CBaseOutputPin classes instantiate CMemAllocator objects as the default allocator if no other suitable allocator is provided.

All member functions in this class that return HRESULT and accept a pointer as a parameter return E_POINTER when passed a null pointer.

Member Functions

Alloc Allocates memory for a media sample (overrides CBaseAllocator::Alloc).
CMemAllocator Constructs a CMemAllocator object.
ReallyFree Frees memory when called from the destructor (or from Alloc when reallocating for new size or count).

Overridable Member Functions

Free Indicates an overridden CBaseAllocator::Free member function, called when a decommit operation is complete to free memory.

Implemented IMemAllocator Methods

CreateInstance Creates new instances of CMemAllocator in the factory template.
SetProperties Sets the number of media samples and the size of each.

CMemAllocator::Alloc

CMemAllocator Class

Allocates a media sample object.

Syntax

HRESULT Alloc(void); 

Return Value

Returns an HRESULT value.

Remarks

This member function creates instances of CMediaSample objects, adds them to the m_lFree data members, and updates the m_lAllocated count. This member function is called from IMemAllocator::Commit when becoming active.

CMemAllocator::CMemAllocator

CMemAllocator Class

Constructs a CMemAllocator object.

Syntax

CMemAllocator(
    TCHAR *pName,
    LPUNKNOWN lpUnk,
    HRESULT *phr
); 

Parameters

pName
Pointer to the name of the allocator object.
lpUnk
Pointer to the controlling IUnknown interface.
phr
Pointer to the general COM return value. This value is changed only if this function fails.

Return Value

No return value.

Remarks

This constructor is passed to CBaseAllocator::CBaseAllocator, which initializes the data members.

CMemAllocator::CreateInstance

CMemAllocator Class

Creates new instances of CMemAllocator in the factory template.

Syntax

static CUnknown *CreateInstance(
    LPUNKNOWN pUnk,
    HRESULT *phr
);

Parameters

pUnk
Pointer to the controllingIUnknown interface.
phr
Pointer to the HRESULT value into which to place resulting information.

Return Value

Returns the pUnkRet parameter, which is a CUnknown class object.

CMemAllocator::Free

CMemAllocator Class

Frees memory for a media sample object.

Syntax

HRESULT Free(void); 

Return Value

No return value.

Remarks

This member function overrides the pure virtual CBaseAllocator::Free member function called when a decommit operation has completed. Memory is actually freed in ReallyFree, which is called from the destructor, so this function is not used in this class.

CMemAllocator::ReallyFree

CMemAllocator Class

Releases all media samples in the free list.

Syntax

void ReallyFree (void); 

Return Value

No return value.

Remarks

The CMemAllocator class holds memory until the object is actually deleted. This member function can be overridden to handle freeing media samples when a decommit occurs.

This member function is protected.

CMemAllocator::SetProperties

CMemAllocator Class

Determines the size, number, and alignment of blocks.

Syntax

HRESULT SetProperties(
    ALLOCATOR_PROPERTIES *pRequest,
    ALLOCATOR_PROPERTIES *pActual
);

Parameters

pRequest
Pointer to requested allocator properties.
pActual
Pointer to allocator properties actually set.

Return Value

Returns an HRESULT value.

Remarks

The pRequest parameter is filled in by the caller with the requested values for the count, number, and alignment as specified by the ALLOCATOR_PROPERTIES structure. The pActual parameter is filled in by the allocator with the closest values it can provide for the request. This member function cannot be called unless the allocator has been decommitted using the IMemAllocator::Decommit method.

This member function replaces SetCountAndSize in previous releases.


Top of Page Top of Page
© 2000 Microsoft and/or its suppliers. All rights reserved. Terms of Use.