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


Метод IMF2DBuffer::Lock2D (mfobjects.h)

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

Синтаксис

HRESULT Lock2D(
  [out] BYTE **ppbScanline0,
  [out] LONG *plPitch
);

Параметры

[out] ppbScanline0

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

[out] plPitch

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

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

Метод возвращает HRESULT. Допустимые значения включают, но не ограничиваются, значения, приведенные в следующей таблице.

Код возврата Описание
S_OK
Метод выполнен успешно.
D3DERR_INVALIDCALL
Не удается заблокировать поверхность Direct3D.
MF_E_INVALIDREQUEST
В настоящее время буфер не может быть заблокирован.

Комментарии

Если p является указателем на первый байт в строке пикселей, p + (*plPitch) указывает на первый байт в следующей строке пикселей. Буфер может содержать заполнение после каждой строки пикселей, поэтому шаг может быть шире ширины изображения в байтах. Не получайте доступ к памяти, зарезервированной для байтов заполнения, так как она может быть недоступна для чтения или записи. Дополнительные сведения см. в разделе Шаг изображения.

Указатель, возвращенный в pbScanline0 , остается действительным до тех пор, пока вызывающий объект удерживает блокировку. Завершив доступ к памяти, вызовите IMF2DBuffer::Unlock2D , чтобы разблокировать буфер. Необходимо вызывать Unlock2D один раз для каждого вызова Lock2D. После разблокировки буфера указатель, возвращенный в pbScanline0 , становится недействительным и не должен использоваться. Как правило, lock2D лучше вызывать только в том случае, если требуется доступ к буферной памяти, а не раньше.

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

Метод IMFMediaBuffer::Lock завершается сбоем, пока блокировка Lock2D удерживается, и наоборот. Приложения должны одновременно использовать только один из этих методов.

Если базовым буфером является поверхность Direct3D, метод завершается сбоем, если поверхность не блокируется.

Требования

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

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

IMF2DBuffer

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

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