Método IMF2DBuffer2::Lock2DSize (mfobjects.h)

Fornece ao chamador acesso à memória no buffer.

Sintaxe

HRESULT Lock2DSize(
  [in]  MF2DBuffer_LockFlags lockFlags,
  [out] BYTE                 **ppbScanline0,
  [out] LONG                 *plPitch,
  [out] BYTE                 **ppbBufferStart,
  [out] DWORD                *pcbBufferLength
);

Parâmetros

[in] lockFlags

Um membro da enumeração MF2DBuffer_LockFlags que especifica se o buffer deve ser bloqueado para leitura, gravação ou ambos.

[out] ppbScanline0

Recebe um ponteiro para o primeiro byte da linha superior de pixels na imagem. A linha superior é definida como a linha superior quando a imagem é apresentada ao visualizador e pode não ser a primeira linha na memória.

[out] plPitch

Recebe o passo da superfície, em bytes. O passo pode ser negativo, indicando que a imagem é orientada de baixo para cima na memória.

[out] ppbBufferStart

Recebe um ponteiro para o início do buffer acessível na memória.

[out] pcbBufferLength

Recebe o comprimento do buffer, em bytes.

Retornar valor

Esse método pode retornar um desses valores.

Código de retorno Descrição
S_OK
Êxito.
MF_E_INVALIDREQUEST
Solicitação inválida. O buffer já pode estar bloqueado com um sinalizador de bloqueio incompatível. Consulte Observações.
E_OUTOFMEMORY
Não há memória suficiente para concluir a operação.

Comentários

Quando terminar de acessar a memória, chame IMF2DBuffer::Unlock2D para desbloquear o buffer. Você deve chamar Unlock2D uma vez para cada chamada para Lock2DSize.

Esse método é equivalente ao método IMF2DBuffer::Lock2D . No entanto, Lock2DSize é preferencial porque permite que o chamador valide ponteiros de memória e porque dá suporte a bloqueios somente leitura. Não há garantia de que um buffer dê suporte à interface IMF2DBuffer2 . Para acessar um buffer, você deve experimentar os seguintes métodos na ordem listada:

  1. IMF2DBuffer2::Lock2DSize
  2. IMF2DBuffer::Lock2D
  3. IMFMediaBuffer::Lock
Os parâmetros ppbBufferStart e pcbBufferLength recebem os limites da memória do buffer. Use esses valores para proteger contra estouros de buffer. Use os valores de ppbScanline0 e plPitch para acessar os dados da imagem. Se a imagem estiver de baixo para cima na memória, ppbScanline0 apontará para a última linha de verificação na memória e plPitch será negativo. Para obter mais informações, consulte Image Stride.

O parâmetro lockFlags especifica se o buffer está bloqueado para acesso somente leitura, acesso somente gravação ou acesso de leitura/gravação.

  • Se o buffer já estiver bloqueado para acesso somente leitura, ele não poderá ser bloqueado para acesso de gravação.
  • Se o buffer já estiver bloqueado para acesso somente gravação, ele não poderá ser bloqueado para acesso de leitura.
  • Se o buffer já estiver bloqueado para acesso de leitura/gravação, ele poderá ser bloqueado para acesso de leitura ou gravação.
Quando possível, use um bloqueio somente leitura ou somente gravação e evite bloquear o buffer para acesso de leitura/gravação. Se o buffer representar uma superfície DXGI (Infraestrutura Gráfica DirectX), um bloqueio de leitura/gravação poderá causar uma cópia extra entre a memória da CPU e a memória de GPU.

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows 8 [aplicativos da área de trabalho | Aplicativos UWP]
Servidor mínimo com suporte Windows Server 2012 [aplicativos da área de trabalho | Aplicativos UWP]
Plataforma de Destino Windows
Cabeçalho mfobjects.h (inclua Mfidl.h)

Confira também

IMF2DBuffer2