strmif.h) (AM_MEDIA_TYPE 结构

[与此页面关联的功能 DirectShow 是一项旧功能。 它已被 MediaPlayerIMFMediaEngine媒体基金会中的音频/视频捕获取代。 这些功能已针对Windows 10和Windows 11进行了优化。 Microsoft 强烈建议新代码尽可能使用 MediaPlayerIMFMediaEngineMedia 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 成员指向相应的格式结构。 格式类型包括:

格式类型 格式结构
FORMAT_DvInfo

DVINFO

FORMAT_MPEG2Video

MPEG2VIDEOINFO

FORMAT_MPEGStreams

AM_MPEGSYSTEMTYPE

FORMAT_MPEGVideo

MPEG1VIDEOINFO

FORMAT_None
无。
FORMAT_VideoInfo

VIDEOINFOHEADER

FORMAT_VideoInfo2

VIDEOINFOHEADER2

FORMAT_WaveFormatEx

WAVEFORMATEX

GUID_NULL

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. */
    }
}
在某些情况下,可以将格式块设置为 NULL ,将格式类型设置为GUID_NULL,从而导致 部分媒体类型。 这使你可以指定一系列可能的格式。 例如,可以指定 24 位 RGB (MEDIASUBTYPE_RGB24) 而不给出确切的宽度或高度。

若要获取有关用于调试的指定媒体类型的详细信息,请使用 DisplayType 方法。

要求

   
标头 strmif.h (包括 Dshow.h)

另请参阅

关于媒体类型

DirectShow 结构

媒体类型函数

媒体类型