strmif.h) (AM_MEDIA_TYPE 结构
[与此页面关联的功能 DirectShow 是一项旧功能。 它已被 MediaPlayer、 IMFMediaEngine 和 媒体基金会中的音频/视频捕获取代。 这些功能已针对Windows 10和Windows 11进行了优化。 Microsoft 强烈建议新代码尽可能使用 MediaPlayer、 IMFMediaEngine 和 Media Foundation 中的音频/视频捕获 ,而不是 DirectShow。 如果可能,Microsoft 建议重写使用旧 API 的现有代码以使用新 API。]
AM_MEDIA_TYPE结构描述媒体示例的格式。
语法
typedef struct _AMMediaType {
GUID majortype;
GUID subtype;
BOOL bFixedSizeSamples;
BOOL bTemporalCompression;
ULONG lSampleSize;
GUID formattype;
IUnknown *pUnk;
ULONG cbFormat;
BYTE *pbFormat;
} AM_MEDIA_TYPE;
成员
majortype
全局唯一标识符 (GUID) ,用于指定媒体示例的主要类型。 有关可能的主要类型的列表,请参阅 媒体类型。
subtype
指定媒体示例的子类型的 GUID。 有关可能的子类型的列表,请参阅 媒体类型。 对于某些格式,该值可能MEDIASUBTYPE_None,这意味着格式不需要子类型。
bFixedSizeSamples
如果 为 TRUE,则样本大小固定。 此字段仅供提供信息。 对于音频,它通常设置为 TRUE。 对于视频,对于未压缩的视频,它通常为 TRUE ,对于压缩的视频为 FALSE 。
bTemporalCompression
如果 为 TRUE,则使用临时 (帧间) 压缩来压缩样本。 值为 TRUE 表示并非所有帧都是关键帧。 此字段仅供提供信息。
lSampleSize
样本的大小(以字节为单位)。 对于压缩数据,该值可以为零。
formattype
指定用于格式块的结构的 GUID。 pbFormat 成员指向相应的格式结构。 格式类型包括:
格式类型 | 格式结构 |
---|---|
|
|
|
|
|
|
|
|
|
无。 |
|
|
|
|
|
|
|
无 |
pUnk
未使用。 设置为 NULL。
cbFormat
格式块的大小(以字节为单位)。
pbFormat
指向格式块的指针。 结构类型由 formattype 成员指定。 格式结构必须存在,除非 formattype GUID_NULL或FORMAT_None。
pbFormat 缓冲区必须通过调用 CoTaskMemAlloc 进行分配。 若要释放格式块,请调用 FreeMediaType。
备注
当两个引脚连接时,它们协商由 AM_MEDIA_TYPE 结构定义的媒体类型。 媒体类型描述筛选器将交换的数据的格式。 如果筛选器在媒体类型上不一致,则它们无法连接。
流类型由两个 GUID指定,称为主类型和子类型。 主要类型定义常规类别,例如视频、音频或字节流。 子类型定义主类型中的较窄类别。 例如,视频子类型包括 8 位、16 位、24 位和 32 位 RGB。
AM_MEDIA_TYPE结构后跟一个长度可变的数据块,其中包含特定于格式的信息。 pbFormat 成员指向此块,称为格式块。 格式块的布局取决于流中数据类型,由 formattype 成员指定。 格式块可能为 NULL。 检查 cbFormat 成员以确定大小。 强制转换 pbFormat 成员以访问格式块。 例如:
C++ |
---|
if (pmt->formattype == FORMAT_VideoInfo) { // Check the buffer size. if (pmt->cbFormat >= sizeof(VIDEOINFOHEADER)) { VIDEOINFOHEADER *pVih = reinterpret_cast<VIDEOINFOHEADER*>(pmt->pbFormat); /* Access VIDEOINFOHEADER members through pVih. */ } } |
若要获取有关用于调试的指定媒体类型的详细信息,请使用 DisplayType 方法。
要求
标头 | strmif.h (包括 Dshow.h) |