This 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
Name | Description |
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
Name | Description |
Free | Indicates an overridden CBaseAllocator::Free member function, called when a decommit operation is complete to free memory. |
Implemented IMemAllocator Methods
Name | Description |
CreateInstance | Creates new instances of CMemAllocator in the factory template. |
SetProperties | Sets the number of media samples and the size of each. |
Allocates a media sample object.
HRESULT Alloc(void);
Returns an HRESULT value.
This member function instantiates 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.
Constructs a CMemAllocator object.
CMemAllocator(
TCHAR * pName,
LPUNKNOWN lpUnk,
HRESULT * phr
);
No return value.
This constructor is passed to CBaseAllocator::CBaseAllocator, which initializes the data members.
Creates new instances of CMemAllocator in the factory template.
static CUnknown *CreateInstance(
LPUNKNOWN pUnk,
HRESULT *phr
);
Returns the pUnkRet parameter, which is a CUnknown class object.
Frees memory for a media sample object.
HRESULT Free(void);
No return value.
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.
Releases all media samples in the free list.
void ReallyFree (void);
No return value.
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.
Determines the size, number, and alignment of blocks.
HRESULT SetProperties(
ALLOCATOR_PROPERTIES * pRequest,
ALLOCATOR_PROPERTIES * pActual
);
Returns an HRESULT value.
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.
© 1997 Microsoft Corporation. All rights reserved. Terms of Use.