Compartilhar via


Método IVMRSurfaceAllocator::AllocateSurface (strmif.h)

[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.]

O AllocateSurface método aloca uma superfície DirectDraw.

Sintaxe

HRESULT AllocateSurface(
  [in]  DWORD_PTR            dwUserID,
  [in]  VMRALLOCATIONINFO    *lpAllocInfo,
  [in]  DWORD                *lpdwActualBuffers,
  [out] LPDIRECTDRAWSURFACE7 *lplpSurface
);

Parâmetros

[in] dwUserID

Um cookie de DWORD_PTR definido pelo aplicativo que identifica exclusivamente essa instância da VMR para uso em cenários em que uma instância do alocador-apresentador é usada com várias instâncias de VMR.

[in] lpAllocInfo

Especifica a estrutura VMRALLOCATIONINFO . Consulte Observações.

[in] lpdwActualBuffers

[out] Na entrada, esse parâmetro é usado para solicitar o número de buffers desejados. Na saída, ele recebe o número real de buffers criados.

[out] lplpSurface

Endereço de um ponteiro que recebe a superfície direct3D.

Retornar valor

Se o método for bem-sucedido, retornará S_OK. Se falhar, retornará um código de erro.

Código de retorno Descrição
E_POINTER
Um dos ponteiros é inválido.
E_INVALIDARG
Em dwFlags, a AMAP_3D_TARGET foi combinada com AMAP_FORCE_SYSMEM ou AMAP_ALLOW_SYSMEM.
E_FAIL
Um ou mais membros da estrutura BITMAPINFOHEADER especificada por lpAllocInfo-lpHdr> estão incorretos.

Comentários

Antes de chamar AllocateSurface explicitamente, um aplicativo cliente deve chamar IVMRSurfaceAllocator::FreeSurface para ter certeza de que o buffer frontal da superfície de decodificação do DirectDraw é NULL. Se não for NULL no momento em que um aplicativo chamar AllocateSurface, a versão de depuração do quartz.dll causará uma asserção.

Ao implementar esse método em um alocador-apresentador personalizado, você deve examinar o valor de lpAllocInfo-lpHdr-biBitCount>>. Se biBitCount for zero, você deverá defini-lo como a profundidade do pixel para a exibição atual. Se BiBitCount for deixado em zero, a alocação de superfície falhará e uma nova VMR (padrão) será criada.

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows XP com SP1 [somente aplicativos da área de trabalho]
Servidor mínimo com suporte Windows Server 2003 [somente aplicativos da área de trabalho]
Plataforma de Destino Windows
Cabeçalho strmif.h (inclua Dshow.h)
Biblioteca Strmiids.lib

Confira também

Códigos de erro e êxito

IVMRSurfaceAllocator Interface

Usando o Renderizador de Combinação de Vídeos