Интерфейс 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::GetCurrentLength или IMFMediaBuffer::GetMaxLength. Аналогичным образом, при изменении данных в буфере не нужно вызывать IMFMediaBuffer::SetCurrentLength для обновления размера. Как правило, следует избегать смешивания вызовов методов IMF2DBuffer и IMFMediaBuffer в одном буфере мультимедиа.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows Vista [классические приложения | Приложения UWP] |
Минимальная версия сервера | Windows Server 2008 [классические приложения | Приложения UWP] |
Целевая платформа | Windows |
Header | mfobjects.h (включая Mfidl.h) |