Compartilhar via


Método ISampleGrabber::GetCurrentBuffer

[O recurso associado a esta página, DirectShow, é um recurso herdado. Foi substituído por MediaPlayer, IMFMediaEngine e Audio/Video Capture in 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 Audio/Video Capture in 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.]

Observação

[Preterido. Essa API pode ser removida de versões futuras do Windows.]

 

O método GetCurrentBuffer recupera uma cópia do buffer associado ao exemplo mais recente.

Sintaxe

HRESULT GetCurrentBuffer(
  [in, out] long *pBufferSize,
  [out]     long *pBuffer
);

Parâmetros

pBufferSize [in, out]

Ponteiro para o tamanho do buffer. Se pBuffer for NULL, esse parâmetro receberá o tamanho do buffer necessário, em bytes. Se pBuffer não for NULL, defina esse parâmetro como igual ao tamanho do buffer, em bytes. Na saída, o parâmetro recebe o número de bytes que foram copiados para o buffer. Esse valor pode ser menor que o tamanho do buffer.

pBuffer [out]

Ponteiro para uma matriz de bytes de tamanho pBufferSize ou NULL. Se esse parâmetro não for NULL, o buffer atual será copiado para a matriz. Se esse parâmetro for NULL, o parâmetro pBufferSize receberá o tamanho do buffer necessário.

Retornar valor

Retorna um dos valores a seguir.

Código de retorno Descrição
E_INVALIDARG
Os exemplos não estão sendo armazenados em buffer. Chame ISampleGrabber::SetBufferSamples.
E_OUTOFMEMORY
O buffer especificado não é grande o suficiente.
E_POINTER
Argumento de ponteiro NULL.
S_OK
Êxito.
VFW_E_NOT_CONNECTED
O filtro não está conectado.
VFW_E_WRONG_STATE
O filtro ainda não recebeu nenhuma amostra. Para fornecer um exemplo, execute ou pause o grafo.

 

Comentários

Para ativar o buffer, chame ISampleGrabber::SetBufferSamples com um valor true.

Chame esse método duas vezes. Na primeira chamada, defina pBuffer como NULL. O tamanho do buffer é retornado em pBufferSize. Em seguida, aloque uma matriz e chame o método novamente. Na segunda chamada, passe o tamanho da matriz em pBufferSize e passe o endereço da matriz em pBuffer. Se a matriz não for grande o suficiente, o método retornará E_OUTOFMEMORY.

O parâmetro pBuffer é digitado como um ponteiro longo , mas o conteúdo do buffer depende do formato dos dados. Chame ISampleGrabber::GetConnectedMediaType para obter o tipo de mídia do formato.

Não chame esse método enquanto o grafo de filtro estiver em execução. Enquanto o grafo de filtro está em execução, o filtro De exemplo grabber substitui o conteúdo do buffer sempre que ele recebe um novo exemplo. A melhor maneira de usar esse método é usar o "modo de captura única", que interrompe o grafo depois de receber o primeiro exemplo. Para definir o modo de tiro único, chame ISampleGrabber::SetOneShot.

O filtro não armazena em buffer exemplos de pré-registro ou amostras nas quais o membro dwStreamId da estrutura AM_SAMPLE2_PROPERTIES é algo diferente de AM_STREAM_MEDIA.

Observação

O arquivo de cabeçalho Qedit.h não é compatível com cabeçalhos Direct3D posteriores à versão 7.

 

Observação

Para obter qedit.h, baixe o SDK do Microsoft Windows Update para Windows Vista e .NET Framework 3.0. O Qedit.h não está disponível no SDK do Microsoft Windows para Windows 7 e .NET Framework 3.5 Service Pack 1.

 

Requisitos

Requisito Valor
parâmetro
Qedit.h
Biblioteca
Strmiids.lib

Confira também

Usando o grabber de exemplo

ISampleGrabber Interface