AM_MEDIA_TYPE 構造体
AM_MEDIA_TYPE 構造体は、メディア サンプルのフォーマットを記述する。
構文
typedef struct _MediaType {
GUID majortype;
GUID subtype;
BOOL bFixedSizeSamples;
BOOL bTemporalCompression;
ULONG lSampleSize;
GUID formattype;
IUnknown *pUnk;
ULONG cbFormat;
[size_is(cbFormat)] BYTE *pbFormat;
} AM_MEDIA_TYPE;
メンバ
majortype
メディア サンプルの メジャー タイプを指定するグローバル一意識別子 (GUID)。指定できるメジャー タイプの一覧については、「メディア タイプ」を参照すること。
subtype
メディア サンプルのサブタイプを指定する GUID。指定できるサブタイプの一覧については、「メディア タイプ」を参照すること。一部のフォーマットについては、この値が MEDIASUBTYPE_None の場合がある。これは、フォーマットにはサブタイプが必要ないことを意味している。
bFixedSizeSamples
TRUE の場合、サンプルのサイズは固定である。このフィールドは参照専用である。オーディオの場合は、通常、TRUE に設定される。ビデオの場合、通常、非圧縮ビデオは TRUE、圧縮ビデオは FALSE に設定される。
bTemporalCompression
TRUE の場合、サンプルは時系列 (フレーム間) 圧縮方式で圧縮されている。値 TRUE はフレームがすべてキー フレームとは限らないことを示す。このフィールドは参照専用である。
lSampleSize
サンプルのサイズ (バイト単位)。圧縮データの場合は、0 も可能。
formattype
フォーマット ブロックに使う構造体を指定する GUID。pbFormat メンバは、対応するフォーマット構造体を指す。フォーマット タイプには次のものがある。
フォーマット タイプ (format type) | フォーマット構造体 |
FORMAT_None | なし |
FORMAT_DvInfo | DVINFO |
FORMAT_MPEGVideo | MPEG1VIDEOINFO |
FORMAT_MPEG2Video | MPEG2VIDEOINFO |
FORMAT_VideoInfo | VIDEOINFOHEADER |
FORMAT_VideoInfo2 | VIDEOINFOHEADER2 |
FORMAT_WaveFormatEx | WAVEFORMATEX |
GUID_NULL | なし |
pUnk
未使用。
cbFormat
フォーマット ブロックのサイズ (バイト単位)。
pbFormat
フォーマット ブロックへのポインタ。構造体の種類は、formattype メンバによって指定される。formattype が GUID_NULL または FORMAT_None でない限り、フォーマット構造体が存在しなければならない。
注意
2 つのピンが接続する場合、AM_MEDIA_TYPE 構造体が定義するメディア タイプをネゴシエートする。メディア タイプはフィルタが交換するデータのフォーマットを記述する。フィルタがメディア タイプを受け入れないと、接続はできない。
ストリーム タイプは "メジャー タイプ" と "サブタイプ" と呼ばれる 2 つの GUID によって指定される。メジャー タイプはビデオ、オーディオ、またはバイト ストリームのような一般的なカテゴリを定義する。サブタイプはメジャー タイプ内部のより細かいカテゴリを定義する。たとえば、ビデオ サブタイプには 8 ビット RGB、16 ビット RGB、24 ビット RGB、32 ビット RGBが含まれる。
AM_MEDIA_TYPE 構造体の後には可変長のデータ ブロックが続き、このデータ ブロックにフォーマット固有の情報を格納する。pbFormat メンバは、"フォーマット ブロック" と呼ばれるこのブロックへのポインタである。フォーマット ブロックのレイアウトはストリーム内のデータ型に依存し、formattype メンバによって指定される。フォーマット ブロックは NULL 値も可能。cbFormat メンバをチェックしてサイズを調べること。フォーマット ブロックにアクセスするには、pbFormat メンバをキャストする。次に例を示す。
if (pmt->formattype == FORMAT_VideoInfo)
{
// バッファ サイズを調べる。
if (pmt->cbFormat >= sizeof(VIDEOINFOHEADER))
{
VIDEOINFOHEADER *pVih =
reinterpret_cast<VIDEOINFOHEADER*>(pmt->pbFormat);
/* pVih から VIDEOINFOHEADER メンバーにアクセスする。 */
}
}
場合によっては、フォーマット ブロックを NULL に設定し、フォーマット タイプを GUID_NULL に設定できる。その場合は "パーシャル" メディア タイプとなる。この方法を使うと、一定の範囲の可能なフォーマットを指定できる。たとえば、ビデオフレームの厳密な幅や高さを指定しなくても、24ビット RGB (MEDIASUBTYPE_RGB24) を指定できる。
デバッグを行うために指定するメディア タイプに関する情報を取得するには、DisplayType メソッドを使う。
参照