Interfaccia IMF2DBuffer (mfobjects.h)
Rappresenta un buffer che contiene una superficie bidimensionale, ad esempio un fotogramma video.
Ereditarietà
L'interfaccia IMF2DBuffer eredita dall'interfaccia IUnknown . IMF2DBuffer ha anche questi tipi di membri:
Metodi
L'interfaccia IMF2DBuffer dispone di questi metodi.
IMF2DBuffer::ContiguousCopyFrom Copia i dati in questo buffer da un buffer con un formato contiguo. |
IMF2DBuffer::ContiguousCopyTo Copia questo buffer nel buffer del chiamante, convertendo i dati in formato contiguo. |
IMF2DBuffer::GetContiguousLength Recupera il numero di byte necessari per archiviare il contenuto del buffer in formato contiguo. |
IMF2DBuffer::GetScanline0AndPitch Recupera un puntatore alla memoria del buffer e allo stride di superficie. |
IMF2DBuffer::IsContiguousFormat Esegue una query che indica se il buffer è contiguo nel formato nativo. |
IMF2DBuffer::Lock2D Concede al chiamante l'accesso alla memoria nel buffer. (IMF2DBuffer.Lock2D) |
IMF2DBuffer::Unlock2D Sblocca un buffer bloccato in precedenza. Chiamare questo metodo una volta per ogni chiamata a IMF2DBuffer::Lock2D. |
Commenti
Per ottenere un puntatore a questa interfaccia, chiamare QueryInterface nel buffer multimediale.
Per usare un buffer 2D, è importante conoscere lo stride, ovvero il numero di byte necessari per passare da una riga di pixel alla successiva. Lo stride può essere maggiore della larghezza dell'immagine, perché la superficie può contenere byte di spaziatura interna dopo ogni riga di pixel. Lo stride può anche essere negativo, se i pixel sono orientati dal basso verso l'alto in memoria. Per altre informazioni, vedere Image Stride.
Ogni formato video definisce una rappresentazione contigua o compressa . Questa rappresentazione è compatibile con il layout standard di una superficie DirectX in memoria di sistema, senza spaziatura interna aggiuntiva. Per il video RGB, la rappresentazione contigua ha un passo uguale alla larghezza dell'immagine in byte, arrotondata fino al limite DWORD più vicino. Per il video YUV, il layout della rappresentazione contigua dipende dal formato YUV. Per i formati YUV planari, il piano Y potrebbe avere un passo diverso rispetto ai piani you e V.
Se un buffer multimediale supporta l'interfaccia IMF2DBuffer , non è garantito che il buffer sottostante abbia una rappresentazione contigua, perché potrebbero esserci byte di spaziatura interna aggiuntivi dopo ogni riga di pixel. Quando un buffer non è contiguo, i metodi Lock e Lock2D hanno comportamenti diversi:
- Il metodo Lock2D restituisce un puntatore al buffer sottostante. Il buffer potrebbe non essere contiguo.
- Il metodo Lock restituisce un buffer che è garantito essere contiguo. Se il buffer sottostante non è contiguo, il metodo copia i dati in un nuovo buffer e il metodo Unlock lo copia nuovamente nel buffer originale.
Per le immagini non compresse, la quantità di dati validi nel buffer è determinata dalla larghezza, dall'altezza e dal layout pixel dell'immagine. Per questo motivo, se si chiama Lock2D per accedere al buffer, non basarsi sui valori restituiti da IMFMediaBuffer::GetCurrentLength o IMFMediaBuffer::GetMaxLength. Analogamente, se si modificano i dati nel buffer, non è necessario chiamare IMFMediaBuffer::SetCurrentLength per aggiornare le dimensioni. In genere, è consigliabile evitare di combinare le chiamate ai metodi IMF2DBuffer e IMFMediaBuffer nello stesso buffer multimediale.
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) |