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

Proporciona al autor de la llamada acceso a la memoria del búfer.

Sintaxis

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

Parámetros

[in] lockFlags

Miembro de la enumeración MF2DBuffer_LockFlags que especifica si se va a bloquear el búfer para leer, escribir o ambos.

[out] ppbScanline0

Recibe un puntero al primer byte de la fila superior de píxeles de la imagen. La fila superior se define como la fila superior cuando se presenta la imagen al visor y es posible que no sea la primera fila en la memoria.

[out] plPitch

Recibe el intervalo de superficie, en bytes. El paso puede ser negativo, lo que indica que la imagen está orientada desde la parte inferior hacia arriba en la memoria.

[out] ppbBufferStart

Recibe un puntero al inicio del búfer accesible en memoria.

[out] pcbBufferLength

Recibe la longitud del búfer, en bytes.

Valor devuelto

Este método puede devolver uno de estos valores.

Código devuelto Descripción
S_OK
Correcto.
MF_E_INVALIDREQUEST
Solicitud no válida. Es posible que el búfer ya esté bloqueado con una marca de bloqueo incompatible. Vea la sección Comentarios.
E_OUTOFMEMORY
No hay memoria suficiente para completar la operación.

Comentarios

Cuando haya terminado de acceder a la memoria, llame a IMF2DBuffer::Unlock2D para desbloquear el búfer. Debes llamar a Unlock2D una vez para cada llamada a Lock2DSize.

Este método es equivalente al método IMF2DBuffer::Lock2D . Sin embargo, Lock2DSize es preferible porque permite al autor de la llamada validar punteros de memoria y porque admite bloqueos de solo lectura. No se garantiza que un búfer admita la interfaz IMF2DBuffer2 . Para acceder a un búfer, debe probar los métodos siguientes en el orden indicado:

  1. IMF2DBuffer2::Lock2DSize
  2. IMF2DBuffer::Lock2D
  3. IMFMediaBuffer::Lock
Los parámetros ppbBufferStart y pcbBufferLength reciben los límites de la memoria del búfer. Use estos valores para protegerse contra las saturaciones del búfer. Use los valores de ppbScanline0 y plPitch para acceder a los datos de la imagen. Si la imagen está en la parte inferior de la memoria, ppbScanline0 apuntará a la última línea de examen en la memoria y el plPitch será negativo. Para obtener más información, consulte Image Stride.

El parámetro lockFlags especifica si el búfer está bloqueado para el acceso de solo lectura, el acceso de solo escritura o el acceso de lectura y escritura.

  • Si el búfer ya está bloqueado para el acceso de solo lectura, no se puede bloquear para el acceso de escritura.
  • Si el búfer ya está bloqueado para el acceso de solo escritura, no se puede bloquear para el acceso de lectura.
  • Si el búfer ya está bloqueado para el acceso de lectura y escritura, se puede bloquear para el acceso de lectura o escritura.
Cuando sea posible, use un bloqueo de solo lectura o de solo escritura y evite bloquear el búfer para el acceso de lectura y escritura. Si el búfer representa una superficie de infraestructura de gráficos DirectX (DXGI), un bloqueo de lectura y escritura puede provocar una copia adicional entre la memoria de CPU y la memoria de GPU.

Requisitos

Requisito Value
Cliente mínimo compatible Windows 8 [aplicaciones de escritorio | Aplicaciones para UWP]
Servidor mínimo compatible Windows Server 2012 [aplicaciones de escritorio | Aplicaciones para UWP]
Plataforma de destino Windows
Encabezado mfobjects.h (include Mfidl.h)

Consulte también

IMF2DBuffer2