AM_MEDIA_TYPE 構造体 (strmif.h)
[このページに関連付けられている機能 DirectShow は、従来の機能です。 MediaPlayer、IMFMediaEngine、Media Foundation のオーディオ/ビデオ キャプチャに置き換わりました。 これらの機能は、Windows 10とWindows 11用に最適化されています。 新しいコードでは、可能であれば、DirectShow ではなく Media Foundation で MediaPlayer、IMFMediaEngine、Audio/Video Capture を使用することを強くお勧めします。 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
サンプルのサイズ (バイト単位)。 圧縮データの場合、値は 0 にすることができます。
formattype
書式ブロックに使用される構造体を指定する GUID。 pbFormat メンバーは、対応する書式構造を指します。 形式の種類は次のとおりです。
形式の種類 | 書式構造 |
---|---|
|
|
|
|
|
|
|
|
|
なし。 |
|
|
|
|
|
|
|
なし |
pUnk
使用されていません。 NULL に設定します。
cbFormat
フォーマット ブロックのサイズ (バイト単位)。
pbFormat
書式ブロックへのポインター。 構造体の型は、 formattype メンバーによって指定されます。 formattype がGUID_NULLまたはFORMAT_Noneされていない限り、 書式 構造が存在する必要があります。
pbFormat バッファーは、CoTaskMemAlloc を呼び出して割り当てる必要があります。 書式ブロックを解放するには、 FreeMediaType を呼び出します。
解説
2 つのピンが接続されると、 AM_MEDIA_TYPE 構造体によって定義されるメディアの種類がネゴシエートされます。 メディアの種類は、フィルターが交換するデータの形式を表します。 フィルターがメディアの種類に一致しない場合は、接続できません。
ストリームの種類は、メジャー型とサブタイプと呼ばれる 2 つの GUIDで指定されます。 メジャー型は、ビデオ、オーディオ、バイト ストリームなどの一般的なカテゴリを定義します。 サブタイプは、メジャー型内のより狭いカテゴリを定義します。 たとえば、ビデオ サブタイプには、8 ビット、16 ビット、24 ビット、32 ビット RGB が含まれます。
AM_MEDIA_TYPE構造体の後に、形式固有の情報を含む可変長データ ブロックが続きます。 pbFormat メンバーは、format ブロックと呼ばれるこのブロックを指します。 書式ブロックのレイアウトは、ストリーム内のデータの種類によって異なり、 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 メソッドを使用します。
要件
Header | strmif.h (Dshow.h を含む) |