Поделиться через


Метод IMF2DBuffer2::Lock2DSize (mfobjects.h)

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

Синтаксис

HRESULT Lock2DSize(
  [in]  MF2DBuffer_LockFlags lockFlags,
  [out] BYTE                 **ppbScanline0,
  [out] LONG                 *plPitch,
  [out] BYTE                 **ppbBufferStart,
  [out] DWORD                *pcbBufferLength
);

Параметры

[in] lockFlags

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

[out] ppbScanline0

Получает указатель на первый байт верхней строки пикселей на изображении. Верхняя строка определяется как верхняя строка, когда изображение представляется средству просмотра и может быть не первой строкой в памяти.

[out] plPitch

Получает шаг поверхности в байтах. Шаг может быть отрицательным, что означает, что изображение ориентировано снизу вверх по памяти.

[out] ppbBufferStart

Получает указатель на начало доступного буфера в памяти.

[out] pcbBufferLength

Получает длину буфера в байтах.

Возвращаемое значение

Этот метод может возвращать одно из этих значений.

Код возврата Описание
S_OK
Успешно.
MF_E_INVALIDREQUEST
Недопустимый запрос. Буфер уже может быть заблокирован с несовместимым флагом блокировки. См. заметки.
E_OUTOFMEMORY
Недостаточно памяти для завершения операции.

Комментарии

Завершив доступ к памяти, вызовите IMF2DBuffer::Unlock2D , чтобы разблокировать буфер. Необходимо вызывать Unlock2D один раз для каждого вызова Lock2DSize.

Этот метод эквивалентен методу IMF2DBuffer::Lock2D . Тем не менее , Lock2DSize является предпочтительным, так как он позволяет вызывающему объекту проверять указатели памяти и поддерживает блокировки только для чтения. Буфер не гарантирует поддержку интерфейса IMF2DBuffer2 . Чтобы получить доступ к буферу, следует попробовать следующие методы в указанном порядке:

  1. IMF2DBuffer2::Lock2DSize
  2. IMF2DBuffer::Lock2D
  3. IMFMediaBuffer::Lock
Параметры ppbBufferStart и pcbBufferLength получают границы буферной памяти. Используйте эти значения для защиты от переполнения буфера. Используйте значения ppbScanline0 и plPitch для доступа к данным изображения. Если изображение находится в памяти снизу вверх, ppbScanline0 будет указывать на последнюю строку сканирования в памяти, а plPitch будет отрицательным. Дополнительные сведения см. в разделе Шаг изображения.

Параметр lockFlags указывает, заблокирован ли буфер для доступа только для чтения, доступа только для записи или для чтения и записи.

  • Если буфер уже заблокирован для доступа только для чтения, он не может быть заблокирован для доступа на запись.
  • Если буфер уже заблокирован для доступа только для записи, он не может быть заблокирован для чтения.
  • Если буфер уже заблокирован для доступа на чтение и запись, он может быть заблокирован для чтения или записи.
По возможности используйте блокировку только для чтения или записи и избегайте блокировки буфера для доступа на чтение и запись. Если буфер представляет поверхность инфраструктуры графики DirectX (DXGI), блокировка чтения и записи может привести к дополнительному копированию между памятью ЦП и памятью GPU.

Требования

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

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

IMF2DBuffer2