CBaseAllocator Class
9/8/2008
Este é um abstrato classe base que implementa os mecanismos básicos para um alocador com um número fixo de fixa-tamanho buffers.
O número de buffers e seu tamanho pode ser alterado usando o CBaseAllocator::SetProperties função membro quando uma entrada pino e um pino saída negociam o alocador entre eles.
A classe fornece a funcionalidade básica para um alocador memória Implementando o IMemAllocator interface.
Ele oferece suporte para gerenciar uma lista de CMediaSample Objetos (ou objetos derivado dessa classe), incluindo suporte para o IMemAllocator::Commit e IMemAllocator::Decommit Métodos e bloqueio de IMemAllocator::GetBuffer método.
Qualquer classe derivado dessa classe (such as CMemAllocator) deve criar CMediaSample objetos, o qual este classe base não.
Um mecanismo de sinalização que emprega um semáforo é usado para que se não houver nenhum amostras, um segmento pode esperar até que existem exemplos ou até que o alocador é decommitted. O m_lFree e m_hSem membro variáveis são usadas para implementar esse simples sinalização mecanismo da seguinte maneira.
Quando um segmento chamadas CBaseAllocator::GetBuffer e existem há exemplos disponível, m_lWaiting é incrementado e o segmento chama a Win32 WaitForSingleObject função no semáforo indicado por m_hSem.
Quando um exemplo é liberado (pela IUnknown::Release método retornando o contagem de referência para zero) ou CBaseAllocator::Decommit é chamado e m_lWaiting é o Win32, diferente de zero ReleaseSemaphore função é chamado no m_hSem Com uma contagem de versão m_lWaiting, e m_lWaiting é redefinir para zero.
Todas as funções membro nessa classe que retornam HRESULT e aceitar um ponteiro como um parâmetro retornar E_POINTER quando passado um ponteiro nulo.
Membros de dados protegido
Membro | Descrição |
---|---|
m_bChanged |
TRUE se tem alterado os buffers; caso contrário, FALSE. |
m_bCommitted |
Se TRUE, o alocador está em um estado no qual todos os IMemAllocator::GetBuffer métodos falharem. O IMemAllocator::SetProperties método é a função membro apenas permitida para operar nesse estado. |
m_bDecommitInProgress |
Se TRUE, conclui o processo decommit após o retorno de todas as amostras de mídia. Até que tenha concluído o processo decommit, quaisquer chamadas para IMemAllocator::GetBuffer Retorne E_OUTOFMEMORY. |
m_hSem |
Sinal de sinalização. |
m_lAlignment |
Acordo alinhamento da reserva. |
m_lAllocated |
Número de buffers alocados realmente. |
m_lCount |
Número de buffers para fornecer estabelecido. |
m_lFree |
Lista de CMediaSample objetos que estão atualmente livre (livre lista). |
m_lPrefix |
Prefixo Acordo de reserva (precede valor retornado por IMediaSample::GetPointer). |
m_lSize |
Tamanho de cada reserva. |
m_lWaiting |
Contagem de segmentos que estão aguardando amostras. |
Funções membro
Função membro | Descrição |
---|---|
Constrói um CBaseAllocator WScript.Shell. |
|
Notifica um segmento em espera que é um exemplo disponível na livre lista. |
|
Incrementos de m_lWaiting membro dados para indicar que um segmento está aguardando um exemplo. |
Funções de associados overrideable
Função membro | Descrição |
---|---|
Aloca memória, instancia CMediaSample Objetos e adiciona-los para o m_lAllocated e m_lFree Membros dados. |
|
Decommits memória quando a última reserva é liberada. |
Métodos IMemAllocator implementada
Método | Descrição |
---|---|
Aloca memória por chamado de CBaseAllocator::Alloc função membro, que você deve substituir. |
|
Libera todos os recursos e insere o inativo estado. Bloqueando chamadas para IMemAllocator::GetBuffer deve retornar com um valor de erro e todas as chamadas adicionais para GetBuffer falha quando o inativo no estado. |
|
Recupera um contêiner para um exemplo. |
|
Determina o tamanho, número e alinhamento de blocos. |
|
Lançamentos de CMediaSample WScript.Shell. |
|
Especifica um número desejado de blocos, tamanho dos blocos e definir alinhamento bloco. Esse método retorna o real valores para o mesmo. |
Métodos INonDelegatingUnknown implementada
Método | Descrição |
---|---|
Passa sem os ponteiros para as interfaces adicionadas ao derivado classe filtro. |
Requisitos
Windows Embedded CE | Windows CE 2.12 and later |
Windows Mobile | Windows Mobile Version 5.0 and later |
Note | Microsoft DirectShow applications and DirectShow filters have different include file and Library requirements For more information, see Setting Up the Build Environment |