ISampleGrabber::SetMediaType 方法

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

注意

[已弃用。 此 API 可能会从 Windows 的未来版本中删除。]

 

方法 SetMediaType 指定样本抓取器输入引脚上的连接的媒体类型。

语法

HRESULT SetMediaType(
   const AM_MEDIA_TYPE *pType
);

参数

pType

指向 AM_MEDIA_TYPE 结构的指针指定所需的媒体类型。 无需设置所有结构成员;有关详细信息,请参阅备注。

返回值

返回 S_OK。

注解

默认情况下,Sample Grabber 没有首选媒体类型。 若要确保 Sample Grabber 连接到正确的筛选器,请在生成筛选器图之前调用此方法。

此方法限制筛选器将接受的媒体类型范围。 当筛选器连接时,它会尝试匹配 pType 中给定的媒体类型。 为此,它将按此顺序比较主要类型、子类型和格式类型 GUID。 对于其中每个 GUID,如果 pType 具有值GUID_NULL,则 Sample Grabber 接受媒体类型,无需任何进一步检查。 如果 pType 具有任何其他值,示例抓取器会将其与连接类型中的 GUID 进行比较。 除非两个 GUID 完全匹配,否则示例抓取器会拒绝连接。

对于视频媒体类型,示例抓取器忽略格式块。 因此,它将接受任何视频大小和帧速率。 调用 SetMediaType时,请将格式块 (pbFormat) 设置为 NULL ,将 cbFormat) 的大小 (设置为零。 对于音频媒体类型,Sample Grabber 将检查 WAVEFORMATEX 结构,并要求其他筛选器与该格式连接 ,除非 pType 中的格式块为 NULL,或者格式标记WAVE_FORMAT_PCM其他结构成员为零。

示例 1:

  • 主要类型:MEDIATYPE_Video
  • 子类型:GUID_NULL
  • 格式类型:GUID_NULL

示例抓取器将接受主类型等于MEDIATYPE_Video的任何视频类型。 它不会检查子类型。

示例 2:

  • 主要类型:MEDIATYPE_Video
  • 子类型:MEDIASUBTYPE_RGB24
  • 格式类型:GUID_NULL

现在,样本抓取器将检查子类型,并仅接受 RGB 24 视频。

限制: 无论设置哪种类型,样本抓取器筛选器都会拒绝自上而下方向 (负 biHeight) 或格式类型为FORMAT_VideoInfo2的任何视频类型。 在这种情况下,尽管 SetMediaType 方法成功,但筛选器不会连接。

注意

头文件 Qedit.h 与版本 7 之后的 Direct3D 标头不兼容。

 

注意

若要获取 Qedit.h,请下载适用于 Windows Vista 和 .NET Framework 3.0 的Microsoft Windows SDK更新。 Qedit.h 在 Windows 7 和 .NET Framework 3.5 Service Pack 1 的Microsoft Windows SDK中不可用。

 

要求

要求
标头
Qedit.h

Strmiids.lib

另请参阅

使用示例抓取器

ISampleGrabber 接口