Condividi tramite


Metodo IMF2DBuffer2::Lock2DSize (mfobjects.h)

Consente al chiamante di accedere alla memoria nel buffer.

Sintassi

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

Parametri

[in] lockFlags

Membro dell'enumerazione MF2DBuffer_LockFlags che specifica se bloccare il buffer per la lettura, la scrittura o entrambi.

[out] ppbScanline0

Riceve un puntatore al primo byte della riga superiore di pixel nell'immagine. La riga superiore è definita come riga superiore quando l'immagine viene presentata al visualizzatore e potrebbe non essere la prima riga in memoria.

[out] plPitch

Riceve lo stride di superficie, in byte. Lo stride potrebbe essere negativo, che indica che l'immagine è orientata dal basso verso il basso in memoria.

[out] ppbBufferStart

Riceve un puntatore all'inizio del buffer accessibile in memoria.

[out] pcbBufferLength

Riceve la lunghezza del buffer, in byte.

Valore restituito

Questo metodo può restituire uno di questi valori.

Codice restituito Descrizione
S_OK
Operazione completata.
MF_E_INVALIDREQUEST
Richiesta non valida. Il buffer potrebbe essere già bloccato con un flag di blocco non compatibile. Vedere la sezione Osservazioni.
E_OUTOFMEMORY
Memoria insufficiente per completare l'operazione.

Commenti

Al termine dell'accesso alla memoria, chiamare FMI2DBuffer::Unlock2D per sbloccare il buffer. È necessario chiamare Unlock2D una volta per ogni chiamata a Lock2DSize.

Questo metodo equivale al metodo IMF2DBuffer::Lock2D . Tuttavia, Lock2DSize è preferito perché consente al chiamante di convalidare i puntatori di memoria e perché supporta blocchi di sola lettura. Un buffer non è garantito per supportare l'interfaccia FMI2DBuffer2 . Per accedere a un buffer, è necessario provare i metodi seguenti nell'ordine elencato:

  1. FMI2DBuffer2::Lock2DSize
  2. FMI2DBuffer::Lock2D
  3. FMMediaBuffer::Lock
I parametri ppbBufferStart e pcbBufferLength ricevono i limiti della memoria del buffer. Usare questi valori per proteggere gli overrun del buffer. Usare i valori di ppbScanline0 e plPitch per accedere ai dati dell'immagine. Se l'immagine è in basso in memoria, ppbScanline0 punta all'ultima riga di analisi in memoria e plPitch sarà negativo. Per altre informazioni, vedere Image Stride.

Il parametro lockFlags specifica se il buffer è bloccato per l'accesso in sola lettura, l'accesso in sola scrittura o l'accesso in lettura/scrittura.

  • Se il buffer è già bloccato per l'accesso in sola lettura, non può essere bloccato per l'accesso in scrittura.
  • Se il buffer è già bloccato per l'accesso in sola scrittura, non può essere bloccato per l'accesso in lettura.
  • Se il buffer è già bloccato per l'accesso in lettura/scrittura, può essere bloccato per l'accesso in lettura o scrittura.
Quando possibile, usare un blocco di sola lettura o di sola scrittura ed evitare di bloccare il buffer per l'accesso in lettura/scrittura. Se il buffer rappresenta una superficie DXGI (DirectX Graphics Infrastructure), un blocco di lettura/scrittura può causare una copia aggiuntiva tra memoria CPU e memoria GPU.

Requisiti

Requisito Valore
Client minimo supportato Windows 8 [app desktop | App UWP]
Server minimo supportato Windows Server 2012 [app desktop | App UWP]
Piattaforma di destinazione Windows
Intestazione mfobjects.h (include Mfidl.h)

Vedi anche

FMI2DBuffer2