AM_MEDIA_TYPE 構造体 (strmif.h)

[このページに関連付けられている機能 DirectShow は、従来の機能です。 MediaPlayer、IMFMediaEngine、Media Foundation のオーディオ/ビデオ キャプチャに置き換わりました。 これらの機能は、Windows 10とWindows 11用に最適化されています。 新しいコードでは、可能であれば、DirectShow ではなく Media Foundation で MediaPlayerIMFMediaEngineAudio/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 メンバーは、対応する書式構造を指します。 形式の種類は次のとおりです。

形式の種類 書式構造
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_
なし

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. */
    }
}
場合によっては、フォーマット ブロックを NULL に設定し、書式の種類を GUID_NULLに設定すると、 部分的なメディアの種類になります。 これにより、使用可能な形式の範囲を指定できます。 たとえば、幅や高さを正確に指定せずに、24 ビット RGB (MEDIASUBTYPE_RGB24) を指定できます。

デバッグ目的で指定されたメディアの種類に関する詳細情報を取得するには、 DisplayType メソッドを使用します。

要件

   
Header strmif.h (Dshow.h を含む)

関連項目

メディアの種類について

DirectShow 構造体

メディアタイプ関数

メディアの種類