Método IMFMediaBuffer::Lock (mfobjects.h)

Proporciona al autor de la llamada acceso a la memoria del búfer para leer o escribir

Sintaxis

HRESULT Lock(
  [out] BYTE  **ppbBuffer,
  [out] DWORD *pcbMaxLength,
  [out] DWORD *pcbCurrentLength
);

Parámetros

[out] ppbBuffer

Recibe un puntero al inicio del búfer.

[out] pcbMaxLength

Recibe la cantidad máxima de datos que se pueden escribir en el búfer. Este parámetro puede ser NULL. El método IMFMediaBuffer::GetMaxLength devuelve el mismo valor.

[out] pcbCurrentLength

Recibe la longitud de los datos válidos en el búfer, en bytes. Este parámetro puede ser NULL. El método IMFMediaBuffer::GetCurrentLength devuelve el mismo valor.

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
En el caso de los búferes de superficie de Direct3D, se produjo un error al bloquear la superficie.
MF_E_INVALIDREQUEST
El búfer no se puede bloquear en este momento.

Comentarios

Este método proporciona al autor de la llamada acceso a todo el búfer, hasta el tamaño máximo devuelto en el parámetro pcbMaxLength . El valor devuelto en pcbCurrentLength es el tamaño de los datos válidos que ya están en el búfer, lo que podría ser menor que el tamaño total del búfer.

Se garantiza que el puntero devuelto en ppbBuffer es válido y se puede acceder a él de forma segura en todo el búfer siempre que se mantenga el bloqueo. Cuando haya terminado de acceder al búfer, llame a IMFMediaBuffer::Unlock para desbloquear el búfer. Debes llamar a Unlock una vez para cada llamada a Lock. Después de desbloquear el búfer, el puntero devuelto en ppbBuffer ya no es válido y no debe usarse. Por lo general, es mejor llamar a Lock solo cuando necesite acceder a la memoria del búfer y no antes.

Bloquear el búfer no impide que otros subprocesos llamen a Lock, por lo que no debe confiar en este método para sincronizar subprocesos.

Este método puede asignar memoria, pero no transfiere la propiedad de la memoria al autor de la llamada. No libere ni libere la memoria; el búfer multimedia liberará la memoria cuando se destruya el búfer multimedia.

Si modifica el contenido del búfer, actualice la longitud actual llamando a IMFMediaBuffer::SetCurrentLength.

Este método puede asignar internamente memoria, por lo que si el búfer admite la interfaz IMF2DBuffer , debe usar el método IMF2DBuffer::Lock2D para bloquear el búfer en su lugar. En el caso de los búferes 2D, el método Lock2DSize puede ser más eficaz que el método Lock , según el valor de MF2DBuffer_LockFlags que especifique. Llamar a Lock2DSize con MF2DBuffer_LockFlags_Read no incurrirá en una copia cuando el búfer se desbloquee y llamarlo con MF2DBuffer_LockFlags_Write no incurrirá en una copia del búfer interno. Al llamar a Lock2DSize con LockFlags_ReadWrite se comporta igual que Lock y Lock2D , y se producirá una copia de y una copia de vuelta cuando se desbloquee. La guía general para mejorar el rendimiento es evitar el uso de IMFMediaBuffer y IMF2DBuffer siempre que sea posible y, en su lugar, usar IMF2DBuffer2 con las marcas de bloqueo mínimas necesarias. Tenga en cuenta que si el búfer está bloqueado mediante Lock2D, el método Lock podría devolver MF_E_INVALIDREQUEST.

Esta interfaz está disponible en las siguientes plataformas si se instalan los componentes redistribuibles del SDK de Windows Media Format 11:

  • Windows XP con Service Pack 2 (SP2) y versiones posteriores.
  • Windows XP Media Center Edition 2005 con KB900325 (Windows XP Media Center Edition 2005) y KB925766 (paquete acumulativo de actualizaciones de octubre de 2006 para Windows XP Media Center Edition) instalados.

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

IMFMediaBuffer

Búferes multimedia