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


Метод IVMRSurfaceAllocator::AllocateSurface (strmif.h)

[Функция, связанная с этой страницей DirectShow, является устаревшей функцией. Он был заменен MediaPlayer, IMFMediaEngine, и аудио/ видео захвата в Media Foundation. Эти функции оптимизированы для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует, чтобы новый код использовал MediaPlayer, IMFMediaEngine и аудио- и видеозахват в Media Foundation вместо DirectShow, когда это возможно. Корпорация Майкрософт предлагает переписать существующий код, использующий устаревшие API, чтобы по возможности использовать новые API.]

Метод AllocateSurface выделяет поверхность DirectDraw.

Синтаксис

HRESULT AllocateSurface(
  [in]  DWORD_PTR            dwUserID,
  [in]  VMRALLOCATIONINFO    *lpAllocInfo,
  [in]  DWORD                *lpdwActualBuffers,
  [out] LPDIRECTDRAWSURFACE7 *lplpSurface
);

Параметры

[in] dwUserID

Определенный приложением DWORD_PTR файл cookie, который однозначно идентифицирует этот экземпляр VMR для использования в сценариях, когда один экземпляр распределителя-докладчика используется с несколькими экземплярами VMR.

[in] lpAllocInfo

Задает структуру VMRALLOCATIONINFO . См. заметки.

[in] lpdwActualBuffers

[out] При входе этот параметр используется для запроса требуемого количества буферов. В выходных данных он получает фактическое количество созданных буферов.

[out] lplpSurface

Адрес указателя, который получает поверхность Direct3D.

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

Если метод завершается успешно, возвращает значение S_OK. В противном случае функция возвращает код ошибки.

Код возврата Описание
E_POINTER
Один из указателей недопустим.
E_INVALIDARG
В dwFlags AMAP_3D_TARGET была объединена с AMAP_FORCE_SYSMEM или AMAP_ALLOW_SYSMEM.
E_FAIL
Один или несколько элементов структуры BITMAPINFOHEADER, заданной lpAllocInfo-lpHdr>, неверны.

Комментарии

Перед явным вызовом AllocateSurface клиентское приложение должно вызвать IVMRSurfaceAllocator::FreeSurface , чтобы убедиться, что передний буфер декодирования DirectDraw имеет значение NULL. Если значение не равно NULL в момент, когда приложение вызывает AllocateSurface, отладочная версия quartz.dll вызовет утверждение.

При реализации этого метода в пользовательском средстве докладчика распределителя необходимо проверить значение lpAllocInfo-lpHdr-biBitCount>>. Если значение biBitCount равно нулю, необходимо задать для него глубину в пикселях для текущего дисплея. Если значение BiBitCount равно нулю, выделение поверхности завершится ошибкой и будет создано новое (по умолчанию) VMR.

Требования

Требование Значение
Минимальная версия клиента Windows XP с пакетом обновления 1 (SP1) [только классические приложения]
Минимальная версия сервера Windows Server 2003 [только классические приложения]
Целевая платформа Windows
Header strmif.h (включая Dshow.h)
Библиотека Strmiids.lib

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

Коды ошибок и успешного выполнения

Интерфейс IVMRSurfaceAllocator

Использование отрисовщика смешанного видео