Примеры видео
Образец видео представляет собой специализированную реализацию интерфейса IMFSample для использования с улучшенным видеообработчиком (EVR). Чтобы создать экземпляр этого объекта, вызовите функцию MFCreateVideoSampleFromSurface. Функция принимает указатель на поверхность Direct3D и возвращает указатель на интерфейс IMFSample. Следующие типы объектов должны выделять примеры с помощью этой функции:
Пользовательские презентаторы EVR. Инициатор распределяет видеопримеры и отправляет их в метод IMFTransform::ProcessOutput. Дополнительные сведения см. в разделе «Как стать докладчиком EVR».
Декодеры видео, поддерживающие ускорение видео. Дополнительные сведения см. в разделе Поддержка DXVA 2.0 в Media Foundation.
Пример видео-объекта реализует следующие интерфейсы:
Если параметр pUnkSurfaceMFCreateVideoSampleFromSurface не равенNULL, полученный видеопример содержит один буфер мультимедиа, который инкапсулирует поверхность Direct3D. Этот объект буфера имеет ограниченные функциональные возможности:
Метод буфера IMFMediaBuffer::Lock возвращает E_NOTIMPL.
Буфер не реализует интерфейс IMF2DBuffer.
Единственным способом доступа к поверхности из буфера является вызов IMFGetService::GetServiceс помощью идентификатора службы MR_BUFFER_SERVICE.
Если параметр pUnkSurfaceNULL, образец видео создается без буферов мультимедиа. Чтобы буферизовать образец, сделайте следующее:
Создайте поверхность Direct3D.
Создайте буфер поверхности, вызвав MFCreateDXSurfaceBuffer. Для получения дополнительной информации см. буфер поверхности DirectX.
Добавьте буфер в пример, вызвав IMFSample::AddBuffer.
Используйте этот подход, если требуется доступ к памяти поверхности через интерфейс IMF2DBuffer.
Связанные разделы