Partilhar via


Classe CBaseAllocator

[O recurso associado a esta página, DirectShow, é um recurso herdado. Ele foi substituído por MediaPlayer, IMFMediaEngine e Captura de Áudio/Vídeo na Media Foundation. Esses recursos foram otimizados para Windows 10 e Windows 11. A Microsoft recomenda fortemente que o novo código use MediaPlayer, IMFMediaEngine e Captura de Áudio/Vídeo no Media Foundation em vez de DirectShow, quando possível. A Microsoft sugere que o código existente que usa as APIs herdadas seja reescrito para usar as novas APIs, se possível.]

hierarquia da classe cbaseallocator

A classe CBaseAllocator é uma classe base abstrata que implementa um alocador. Os alocadores expõem a interface IMemAllocator .

Um alocador é um objeto que aloca buffers de memória. O alocador mantém uma lista de buffers disponíveis. Quando um cliente (geralmente um filtro) solicita um buffer, o alocador recupera um da lista. O cliente preenche o buffer com dados e pode passar o buffer para outro objeto. Eventualmente, o buffer é liberado e o alocador o retorna para a lista de buffers disponíveis.

Cada buffer é encapsulado por um objeto chamado exemplo de mídia. Exemplos de mídia são uma maneira de empacotar ponteiros para blocos de memória dentro da estrutura COM (Component Object Model). Os exemplos de mídia expõem a interface IMediaSample e são implementados usando a classe CMediaSample . Um exemplo de mídia contém um ponteiro para o buffer associado, que pode ser acessado chamando o método IMediaSample::GetPointer . Para obter mais informações, consulte Exemplos e alocadores.

Para usar essa classe, execute as seguintes etapas:

  1. Chame o método CBaseAllocator::SetProperties para especificar os requisitos de buffer, incluindo o número de buffers e o tamanho de cada buffer.
  2. Chame o método CBaseAllocator::Commit para alocar os buffers.
  3. Chame o método CBaseAllocator::GetBuffer para recuperar exemplos de mídia. Esse método bloqueia até que o próximo exemplo fique disponível.
  4. Quando terminar cada exemplo, chame o método IUnknown::Release no exemplo. O exemplo não é excluído quando sua contagem de referência atinge zero. Em vez disso, o exemplo retorna à lista gratuita do alocador.
  5. Quando terminar de usar o alocador, chame o método CBaseAllocator::D ecommit para liberar a memória dos buffers.

O método Commit chama o método virtual CBaseAllocator::Alloc, que aloca a memória para os buffers. O método Decommit chama o método virtual puro CBaseAllocator::Free, que libera a memória. Classes derivadas devem substituir esses dois métodos.

A classe base CMemAllocator deriva de CBaseAllocator. As classes base de filtro usam a classe CMemAllocator .

Variáveis de membro protegidas Descrição
m_lFree Ponteiro para uma lista de exemplos de mídia disponíveis (gratuitos).
m_hSem Semáforo que é sinalizado quando uma amostra fica disponível.
m_lWaiting Contagem de threads aguardando amostras.
m_lCount Número de buffers a serem fornecidos.
m_lAllocated Número de buffers alocados no momento.
m_lSize Tamanho de cada buffer.
m_lAlignment Alinhamento de cada buffer.
m_lPrefix Prefixo de cada buffer.
m_bChanged Sinalizador indicando se os requisitos de buffer foram alterados.
m_bCommitted Sinalizador que indica se o alocador foi confirmado.
m_bDecommitInProgress Sinalizador indicando se uma operação de descomando está em andamento.
m_pNotify Ponteiro para uma interface de retorno de chamada, que é chamada quando os exemplos são liberados.
m_fEnableReleaseCallback Sinalizador que indica se o retorno de chamada de versão está habilitado.
Métodos Protegidos Descrição
Alloc Aloca memória para os buffers. Virtual.
Métodos públicos Descrição
Cbaseallocator Método de construtor.
~Cbaseallocator Método destruidor.
SetNotify Obsoleto.
GetFreeCount Recupera o número de exemplos de mídia que não estão em uso.
NotifySample Libera todos os threads que estão aguardando amostras.
SetWaiting Incrementa a contagem de threads em espera.
Métodos virtuais puros Descrição
Gratuita Libera toda a memória do buffer.
Métodos IMemAllocator Descrição
SetProperties Especifica o número de buffers a serem alocados e o tamanho de cada buffer.
GetProperties Recupera o número de buffers que o alocador criará e as propriedades do buffer.
Commit Aloca a memória para os buffers.
Decommit Descompromissa os buffers.
GetBuffer Recupera um exemplo de mídia que contém um buffer.
ReleaseBuffer Retorna um exemplo de mídia para a lista de exemplos de mídia gratuitos.

Requisitos

Requisito Valor
parâmetro
Amfilter.h (inclua Streams.h)
Biblioteca
Strmbase.lib (builds de varejo);
Strmbasd.lib (builds de depuração)

Confira também

Fornecendo um alocador personalizado