Metodo IMF2DBuffer::Lock2D (mfobjects.h)

Consente al chiamante di accedere alla memoria nel buffer.

Sintassi

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

Parametri

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

Valore restituito

Il metodo restituisce un HRESULT. I valori possibili includono, ma non sono limitati a, quelli indicati nella tabella seguente.

Codice restituito Descrizione
S_OK
Il metodo è riuscito.
D3DERR_INVALIDCALL
Impossibile bloccare l'area Direct3D.
MF_E_INVALIDREQUEST
Impossibile bloccare il buffer in questo momento.

Commenti

Se p è un puntatore al primo byte in una riga di pixel, p + (*plPitch) punta al primo byte nella riga successiva di pixel. Un buffer potrebbe contenere spaziatura interna dopo ogni riga di pixel, pertanto lo stride potrebbe essere più ampio della larghezza dell'immagine in byte. Non accedere alla memoria riservata ai byte di riempimento, perché potrebbe non essere accessibile da lettura o scrittura. Per altre informazioni, vedere Image Stride.

Il puntatore restituito in pbScanline0 rimane valido finché il chiamante contiene il blocco. Al termine dell'accesso alla memoria, chiamare FMI2DBuffer::Unlock2D per sbloccare il buffer. È necessario chiamare Unlock2D una sola volta per ogni chiamata a Lock2D. Dopo aver sbloccato il buffer, il puntatore restituito in pbScanline0 non è più valido e non deve essere usato. In genere, è consigliabile chiamare Lock2D solo quando è necessario accedere alla memoria del buffer e non in precedenza.

I valori restituiti dai metodi FMMediaBuffer::GetCurrentLength e FMMediaBuffer::GetMaxLength non si applicano al buffer restituito dal metodo Lock2D . Per lo stesso motivo, non è necessario chiamare FMMediaBuffer::SetCurrentLength dopo aver modificato i dati nel buffer restituito dal metodo Lock2D .

Il metodo IMFMediaBuffer::Lock ha esito negativo mentre il blocco Lock2D viene mantenuto e viceversa. Le applicazioni devono usare solo uno di questi metodi alla volta.

Quando il buffer sottostante è una superficie Direct3D, il metodo ha esito negativo se la superficie non è bloccabile.

Requisiti

Requisito Valore
Client minimo supportato Windows Vista [app desktop | App UWP]
Server minimo supportato Windows Server 2008 [app desktop | App UWP]
Piattaforma di destinazione Windows
Intestazione mfobjects.h (include Mfidl.h)
Libreria Mfuuid.lib

Vedi anche

FMI2DBuffer

Buffer multimediali

Buffer video non compressi