Interface IMF2DBuffer (mfobjects.h)

Representa um buffer que contém uma superfície bidimensional, como um quadro de vídeo.

Herança

A interface IMF2DBuffer herda da interface IUnknown . IMF2DBuffer também tem estes tipos de membros:

Métodos

A interface IMF2DBuffer tem esses métodos.

 
IMF2DBuffer::ContiguousCopyFrom

Copia dados para esse buffer de um buffer que tem um formato contíguo.
IMF2DBuffer::ContiguousCopyTo

Copia esse buffer para o buffer do chamador, convertendo os dados em formato contíguo.
IMF2DBuffer::GetContiguousLength

Recupera o número de bytes necessários para armazenar o conteúdo do buffer em formato contíguo.
IMF2DBuffer::GetScanline0AndPitch

Recupera um ponteiro para a memória do buffer e o passo da superfície.
IMF2DBuffer::IsContiguousFormat

Consulta se o buffer é contíguo em seu formato nativo.
IMF2DBuffer::Lock2D

Fornece ao chamador acesso à memória no buffer. (IMF2DBuffer.Lock2D)
IMF2DBuffer::Unlock2D

Desbloqueia um buffer que foi bloqueado anteriormente. Chame esse método uma vez para cada chamada para IMF2DBuffer::Lock2D.

Comentários

Para obter um ponteiro para essa interface, chame QueryInterface no buffer de mídia.

Para usar um buffer 2D, é importante saber o passo a passo, que é o número de bytes necessários para ir de uma linha de pixels para a próxima. O passo pode ser maior que a largura da imagem, pois a superfície pode conter bytes de preenchimento após cada linha de pixels. Stride também poderá ser negativo se os pixels forem orientados de baixo para cima na memória. Para obter mais informações, consulte Image Stride.

Cada formato de vídeo define uma representação contígua ou empacotada . Essa representação é compatível com o layout padrão de uma superfície DirectX na memória do sistema, sem preenchimento adicional. Para vídeo RGB, a representação contígua tem uma inclinação igual à largura da imagem em bytes, arredondada para cima até o limite DWORD mais próximo. Para vídeo YUV, o layout da representação contígua depende do formato YUV. Para formatos YUV planar, o plano Y pode ter um tom diferente dos planos você e V.

Se um buffer de mídia der suporte à interface IMF2DBuffer , não há garantia de que o buffer subjacente tenha uma representação contígua, pois pode haver bytes de preenchimento adicionais após cada linha de pixels. Quando um buffer não é contíguo, os métodos Lock e Lock2D têm comportamentos diferentes:

  • O método Lock2D retorna um ponteiro para o buffer subjacente. O buffer pode não ser contíguo.
  • O método Lock retorna um buffer que tem a garantia de ser contíguo. Se o buffer subjacente não for contíguo, o método copiará os dados para um novo buffer e o método Unlock os copiará de volta para o buffer original.
Chame o método Lock2D para acessar o buffer 2D em seu formato nativo. O formato nativo pode não ser contíguo. O método IMFMediaBuffer::Lock do buffer retorna uma representação contígua do buffer. No entanto, isso pode exigir uma cópia interna do formato nativo. Para buffers 2D, portanto, você deve usar o método Lock2D e evitar o método Lock . Como o método Lock pode causar até duas cópias de buffer, o método Lock2D geralmente é mais eficiente e deve ser usado quando possível. Para descobrir se o buffer subjacente é contíguo, chame IMF2DBuffer::IsContiguousFormat.

Para imagens descompactadas, a quantidade de dados válidos no buffer é determinada pela largura, altura e layout de pixel da imagem. Por esse motivo, se você chamar Lock2D para acessar o buffer, não dependa dos valores retornados por IMFMediaBuffer::GetCurrentLength ou IMFMediaBuffer::GetMaxLength. Da mesma forma, se você modificar os dados no buffer, não precisará chamar IMFMediaBuffer::SetCurrentLength para atualizar o tamanho. Em geral, você deve evitar a combinação de chamadas aos métodos IMF2DBuffer e IMFMediaBuffer no mesmo buffer de mídia.

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows Vista [aplicativos da área de trabalho | Aplicativos UWP]
Servidor mínimo com suporte Windows Server 2008 [aplicativos da área de trabalho | Aplicativos UWP]
Plataforma de Destino Windows
Cabeçalho mfobjects.h (include Mfidl.h)

Confira também

Buffers de mídia

Media Foundation Interfaces

Buffers de vídeo descompactados