Compartir a través de


Método IMF2DBuffer::Lock2D (mfobjects.h)

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

Sintaxis

HRESULT Lock2D(
  [out] BYTE **ppbScanline0,
  [out] LONG *plPitch
);

Parámetros

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

Valor devuelto

El método devuelve un valor HRESULT. Entre los valores posibles se incluyen los que se indican en la tabla siguiente, entre otros.

Código devuelto Descripción
S_OK
El método se ha llevado a cabo de forma correcta.
D3DERR_INVALIDCALL
No se puede bloquear la superficie de Direct3D.
MF_E_INVALIDREQUEST
El búfer no se puede bloquear en este momento.

Comentarios

Si p es un puntero al primer byte de una fila de píxeles, p + (*plPitch) apunta al primer byte de la siguiente fila de píxeles. Un búfer puede contener relleno después de cada fila de píxeles, por lo que el intervalo puede ser más ancho que el ancho de la imagen en bytes. No tenga acceso a la memoria que está reservada para bytes de relleno, ya que es posible que no sea accesible para lectura o escritura. Para obtener más información, consulte Image Stride.

El puntero devuelto en pbScanline0 sigue siendo válido siempre que el autor de la llamada contenga el bloqueo. 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 Lock2D. Después de desbloquear el búfer, el puntero devuelto en pbScanline0 ya no es válido y no debe usarse. Por lo general, es mejor llamar a Lock2D solo cuando necesite acceder a la memoria del búfer y no antes.

Los valores devueltos por los métodos IMFMediaBuffer::GetCurrentLength y IMFMediaBuffer::GetMaxLength no se aplican al búfer devuelto por el método Lock2D . Por la misma razón, no es necesario llamar a IMFMediaBuffer::SetCurrentLength después de manipular los datos en el búfer devuelto por el método Lock2D .

El método IMFMediaBuffer::Lock produce un error mientras se mantiene el bloqueo Lock2D y viceversa. Las aplicaciones solo deben usar uno de estos métodos a la vez.

Cuando el búfer subyacente es una superficie direct3D, se produce un error en el método si la superficie no se puede bloquear.

Requisitos

Requisito Value
Cliente mínimo compatible Windows Vista [aplicaciones de escritorio | aplicaciones para UWP]
Servidor mínimo compatible Windows Server 2008 [aplicaciones de escritorio | aplicaciones para UWP]
Plataforma de destino Windows
Encabezado mfobjects.h (include Mfidl.h)
Library Mfuuid.lib

Consulte también

IMF2DBuffer

Búferes multimedia

Búferes de vídeo sin comprimir