CMediaSample 类
[与此页面关联的功能 DirectShow 是旧版功能。 它已被 MediaPlayer、 IMFMediaEngine 和 Media Foundation 中的音频/视频捕获所取代。 这些功能已针对Windows 10和Windows 11进行了优化。 Microsoft 强烈建议新代码尽可能在 Media Foundation 中使用 MediaPlayer、 IMFMediaEngine 和 音频/视频捕获 ,而不是 DirectShow。 如果可能,Microsoft 建议重写使用旧 API 的现有代码以使用新 API。]
类 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 | 设置示例的属性。 |
要求
要求 | 值 |
---|---|
标头 |
|
库 |
|