Интерфейс IMF2DBuffer (mfobjects.h)

Представляет буфер, содержащий двумерную поверхность, например видеокадр.

Наследование

Интерфейс IMF2DBuffer наследуется от интерфейса IUnknown . IMF2DBuffer также имеет следующие типы членов:

Методы

Интерфейс IMF2DBuffer имеет следующие методы.

 
IMF2DBuffer::ContiguousCopyFrom

Копирует данные в этот буфер из буфера, который имеет непрерывный формат.
IMF2DBuffer::ContiguousCopyTo

Копирует этот буфер в буфер вызывающего объекта, преобразуя данные в непрерывный формат.
IMF2DBuffer::GetContiguousLength

Извлекает количество байтов, необходимое для хранения содержимого буфера в непрерывном формате.
IMF2DBuffer::GetScanline0AndPitch

Извлекает указатель на буферную память и шаг поверхности.
IMF2DBuffer::IsContiguousFormat

Запрашивает, является ли буфер смежным в собственном формате.
IMF2DBuffer::Lock2D

Предоставляет вызывающей объекту доступ к памяти в буфере. (IMF2DBuffer.Lock2D)
IMF2DBuffer::Unlock2D

Разблокирует ранее заблокированный буфер. Вызывайте этот метод один раз для каждого вызова IMF2DBuffer::Lock2D.

Комментарии

Чтобы получить указатель на этот интерфейс, вызовите QueryInterface в буфере мультимедиа.

Чтобы использовать двухмерный буфер, важно знать шаг, то есть количество байтов, необходимых для перехода от одной строки пикселей к другой. Шаг может быть больше ширины изображения, так как поверхность может содержать байты заполнения после каждой строки пикселей. Шаг также может быть отрицательным, если пиксели ориентированы снизу вверх в памяти. Дополнительные сведения см. в разделе Image Stride.

Каждый формат видео определяет непрерывное или упакованое представление. Это представление совместимо со стандартным макетом поверхности DirectX в системной памяти без дополнительного заполнения. Для видео RGB непрерывное представление имеет шаг, равный ширине изображения в байтах, округленную до ближайшей границы DWORD . Для видео YUV макет непрерывного представления зависит от формата YUV. Для плоские форматы YUV плоскость Y может отличаться от уровня you и V.

Если буфер мультимедиа поддерживает интерфейс IMF2DBuffer , базовый буфер не гарантирует непрерывное представление, так как после каждой строки пикселей могут быть дополнительные байты заполнения. Если буфер является несмежным, методы Lock и Lock2D ведут себя по-разному:

  • Метод Lock2D возвращает указатель на базовый буфер. Буфер может не быть непрерывным.
  • Метод Lock возвращает буфер, который гарантированно будет непрерывным. Если базовый буфер не является непрерывным, метод копирует данные в новый буфер, а метод Unlock копирует их обратно в исходный буфер.
Вызовите метод Lock2D для доступа к двухадном буферу в собственном формате. Собственный формат может не быть непрерывным. Метод IMFMediaBuffer::Lock буфера возвращает непрерывное представление буфера. Однако для этого может потребоваться внутренняя копия из собственного формата. Поэтому для двухd-буферов следует использовать метод Lock2D и избегать метода Lock . Так как метод Lock может вызвать до двух буферных копий, метод Lock2D , как правило, более эффективен и должен использоваться по возможности. Чтобы узнать, является ли базовый буфер смежным, вызовите IMF2DBuffer::IsContiguousFormat.

Для несжатых изображений объем допустимых данных в буфере определяется шириной, высотой и макетом изображения в пикселях. По этой причине при вызове Lock2D для доступа к буферу не следует полагаться на значения, возвращаемые IMFMediaBuffer::GetCurrentLength или IMFMediaBuffer::GetMaxLength. Аналогичным образом, при изменении данных в буфере не нужно вызывать IMFMediaBuffer::SetCurrentLength для обновления размера. Как правило, следует избегать смешивания вызовов методов IMF2DBuffer и IMFMediaBuffer в одном буфере мультимедиа.

Требования

Требование Значение
Минимальная версия клиента Windows Vista [классические приложения | Приложения UWP]
Минимальная версия сервера Windows Server 2008 [классические приложения | Приложения UWP]
Целевая платформа Windows
Header mfobjects.h (включая Mfidl.h)

См. также раздел

Буферы мультимедиа

Интерфейсы Media Foundation

Несжатые буферы видео