使用 MFT 媒体缓冲区和示例

编解码器 MCT 使用媒体缓冲区和样本来回传递媒体数据。

媒体缓冲区是管理内存块的 COM 对象,通常用于保存媒体数据。 向/从 MFT 传递数据时,数据始终以媒体缓冲区的形式传递。

所有媒体缓冲区都公开 IMFMediaBuffer 接口。 此接口专为任何类型的数据而设计。 包含视频数据的缓冲区通常也会公开 IMF2DBuffer

媒体缓冲区具有最大大小,即为缓冲区分配的内存量。 若要查找最大大小,请调用 IMFMediaBuffer::GetMaxLength。 在任何时间点,媒体缓冲区也具有当前长度,即缓冲区中的有效数据量,范围从零字节到最大大小不等。 若要获取当前长度,请调用 IMFMediaBuffer::GetCurrentLength。 创建缓冲区时,当前长度为零。 如果将数据写入缓冲区,请调用 IMFMediaBuffer::SetCurrentLength 以更新当前长度。

若要访问缓冲区中的内存,请调用 IMFMediaBuffer::Lock。 此方法返回指向内存块开头的指针。 使用完指针后,调用 IMFMediaBuffer::UnlockLock 方法不是线程同步机制;它不保证其他线程无法访问缓冲区。 Lock 方法用于确保访问的内存在调用 Unlock 方法之前保持有效。

媒体基础 SDK 上下文中 (媒体示例对象) 是包含零个或多个缓冲区的有序列表的对象。 媒体示例公开 IMFSample 接口。

若要创建新示例,请调用 MFCreateSample 函数。 最初,示例的缓冲区列表为空。 若要将缓冲区添加到列表末尾,请调用 IMFSample::AddBuffer

使用编解码器 DSO

使用编解码器 MRT