Примеры видео
Пример объекта video представляет собой специализированную реализацию интерфейса IMFSample для использования с расширенным отрисовщиком видео (EVR). Чтобы создать экземпляр этого объекта, вызовите функцию MFCreateVideoSampleFromSurface . Функция принимает указатель на поверхность Direct3D и возвращает указатель на интерфейс IMFSample . Следующие типы объектов должны выделять примеры с помощью этой функции:
Пользовательские выступающие EVR. Выступающий выделяет примеры видео и отправляет их в метод IMFTransform::P rocessOutput микшера. Дополнительные сведения см. в разделе How to Write an EVR Presenter.
Декодеры видео, поддерживающие ускорение видео. Дополнительные сведения см. в статье Поддержка DXVA 2.0 в Media Foundation.
Пример объекта video реализует следующие интерфейсы:
Если параметр pUnkSurfaceдля MFCreateVideoSampleFromSurface не равен NULL, полученный пример видео содержит один буфер мультимедиа, который инкапсулирует поверхность Direct3D. Этот объект буфера имеет ограниченную функциональность:
Метод IMFMediaBuffer::Lock буфера возвращает E_NOTIMPL.
Буфер не реализует интерфейс IMF2DBuffer .
Единственный способ получить доступ к поверхности из буфера — вызвать IMFGetService::GetService, используя идентификатор службы MR_BUFFER_SERVICE.
Если параметр pUnkSurface имеет значение NULL, образец видео создается с нулевыми буферами мультимедиа. Чтобы добавить буфер в пример, сделайте следующее:
Создайте поверхность Direct3D.
Создайте буфер поверхности, вызвав MFCreateDXSurfaceBuffer. Дополнительные сведения см. в разделе DirectX Surface Buffer.
Добавьте буфер в пример, вызвав IMFSample::AddBuffer.
Используйте этот подход, если требуется доступ к контактной памяти через интерфейс IMF2DBuffer .
Связанные темы