CMediaSample 类

[与此页面关联的功能 DirectShow 是旧版功能。 它已被 MediaPlayerIMFMediaEngineMedia Foundation 中的音频/视频捕获所取代。 这些功能已针对Windows 10和Windows 11进行了优化。 Microsoft 强烈建议新代码尽可能在 Media Foundation 中使用 MediaPlayerIMFMediaEngine音频/视频捕获 ,而不是 DirectShow。 如果可能,Microsoft 建议重写使用旧 API 的现有代码以使用新 API。]

cmediasample 类层次结构

CMediaSample 定义支持 IMediaSample2 接口的媒体示例。 媒体示例包含指向内存缓冲区的指针,以及存储为受保护成员变量的各种属性。

媒体示例由分配器创建,分配器派生自 CBaseAllocator 类。 构造 CMediaSample 函数接收指向已分配缓冲区的指针以及缓冲区的大小。 其他属性通常通过 IMediaSample 接口方法进行设置和检索。

媒体示例的生命周期不同于大多数 COM 对象的生命周期:

  • 分配器保存免费示例列表。 当筛选器需要新示例时,它会调用分配器的 IMemAllocator::GetBuffer 方法。 分配器从其可用列表中检索样本,递增样本的引用计数,并返回指向样本的指针。
  • 筛选器完成示例后,它会对示例调用 IUnknown::Release 方法。 与大多数对象不同,当样本的引用计数达到零时,不会删除自身。 相反,它会在分配器上调用 IMemAllocator::ReleaseBuffer 方法,分配器将示例返回到其可用列表。
  • 在调用 IMemAllocator::D ecommit 方法之前,分配器不会销毁样本。
受保护的成员变量 说明
m_dwFlags 示例属性标志。
m_dwTypeSpecificFlags 特定于类型的标志。
m_pBuffer 指向包含媒体数据的内存缓冲区的指针。
m_lActual 缓冲区中有效数据的长度(以字节为单位)。
m_cbBuffer 缓冲区的大小(以字节为单位)。
m_pAllocator 指向创建此示例的分配器的指针。
m_pNext 指向分配器示例列表中的下一个示例的指针。
m_Start 示例开始时间。
m_End 示例结束时间。
m_MediaStart 媒体开始时间。
m_MediaEnd 媒体停止时间。
m_pMediaType 指向媒体类型的指针(如果类型已从数据流中的上一个示例更改)。
m_dwStreamId 流标识符。
公共成员变量 说明
m_cRef 引用计数。
公共方法 说明
CMediaSample 构造函数方法。
~ CMediaSample 析构函数方法。 虚拟。
SetPointer 设置指向内存缓冲区的指针。
IMediaSample 方法 说明
GetPointer 检索指向缓冲区的读/写指针。
GetSize 检索缓冲区的大小。
GetTime 检索此示例应开始和完成的流时间。
SetTime 设置此示例应开始和完成的流时间。
IsSyncPoint 确定示例的开头是否为同步点。
SetSyncPoint 指定此示例的开头是否为同步点。
IsPreroll 确定此示例是否为预生成示例。
SetPreroll 指定此示例是否为预生成示例。
GetActualDataLength 检索缓冲区中有效数据的长度。
SetActualDataLength 设置缓冲区中有效数据的长度。
GetMediaType 如果媒体类型与上一个示例不同,则检索媒体类型。
SetMediaType 设置示例的媒体类型。
IsDiscontinuity 确定此示例是否表示数据流中的中断。
SetDiscontinuity 指定此示例是否表示数据流中的中断。
GetMediaTime 检索此示例的媒体时间。
SetMediaTime 设置此示例的媒体时间。
IMediaSample2 方法 说明
GetProperties 检索示例的属性。
SetProperties 设置示例的属性。

要求

要求
标头
Amfilter.h (包括 Streams.h)

Strmbase.lib (零售版本) ;
Strmbasd.lib (调试生成)