视频示例
视频示例对象是 IMFSample 接口的专用实现,可与 增强的视频呈现器 (EVR) 配合使用。 若要创建此对象的实例,请调用 MFCreateVideoSampleFromSurface 函数。 函数采用指向 Direct3D 图面的指针,并返回指向 IMFSample 接口的指针。 以下类型的对象应使用此函数分配示例:
自定义 EVR 演示者。 演示者分配视频样本并将其发送到混音器的 IMFTransform::P rocessOutput 方法。 有关详细信息,请参阅 如何编写 EVR 演示者。
支持视频加速的视频解码器。 有关详细信息,请参阅 在媒体基础中支持 DXVA 2.0。
视频示例对象实现以下接口:
如果 MFCreateVideoSampleFromSurface 的 pUnkSurface 参数为非 NULL,则生成的视频示例包含封装 Direct3D 图面的单个媒体缓冲区。 此缓冲区对象的功能有限:
缓冲区的 IMFMediaBuffer::Lock 方法返回E_NOTIMPL。
缓冲区不实现 IMF2DBuffer 接口。
从缓冲区访问图面的唯一方法是使用服务标识符MR_BUFFER_SERVICE调用 IMFGetService::GetService。
如果 pUnkSurface 参数为 NULL,则会使用零个媒体缓冲区创建视频示例。 若要添加示例缓冲区,请执行以下操作:
创建 Direct3D 图面。
通过调用 MFCreateDXSurfaceBuffer 创建图面缓冲区。 有关详细信息,请参阅 DirectX Surface Buffer。
通过调用 IMFSample::AddBuffer 将缓冲区添加到示例。
如果需要通过 IMF2DBuffer 接口访问 Surface 内存,请使用此方法。
相关主题