IMFTransform::GetOutputAvailableType メソッド (mftransform.h)

この Media Foundation 変換 (MFT) の出力ストリームで使用可能なメディアの種類を取得します。

構文

HRESULT GetOutputAvailableType(
  [in]  DWORD        dwOutputStreamID,
  [in]  DWORD        dwTypeIndex,
  [out] IMFMediaType **ppType
);

パラメーター

[in] dwOutputStreamID

出力ストリーム識別子。 ストリーム識別子の一覧を取得するには、 IMFTransform::GetStreamIDs を呼び出します。

[in] dwTypeIndex

取得するメディアの種類のインデックス。 メディアの種類は、0 からインデックスが作成され、ユーザー設定のおおよその順序で返されます。

[out] ppType

IMFMediaType インターフェイスへのポインターを受け取ります。 呼び出し元はインターフェイスを解放する必要があります。

戻り値

このメソッドは HRESULT を返します。 有効な値を次の表に示しますが、これ以外にもあります。

リターン コード 説明
S_OK
メソッドが成功しました。
E_NOTIMPL
MFT には、使用可能な出力の種類の一覧がありません。
MF_E_INVALIDSTREAMNUMBER
ストリーム識別子が無効です。
MF_E_NO_MORE_TYPES
dwTypeIndex パラメーターが範囲外です。
MF_E_TRANSFORM_TYPE_NOT_SET
出力の種類を設定する前に、入力の種類を設定する必要があります。

注釈

MFT は、出力ストリームごとに使用可能なメディアの種類の一覧を定義し、優先順に並べ替えます。 このメソッドは、出力ストリームで使用可能なメディアの種類を列挙します。 使用可能な型を列挙するには、メソッドがMF_E_NO_MORE_TYPESを返すまで dwTypeIndex をインクリメントします。

あるストリームでメディアの種類を設定すると、別のストリームで使用可能な種類を変更 (または優先順序を変更) できます。 ただし、使用可能な型の一覧を動的に更新するために MFT は必要ありません。 特定の入力型を設定できるかどうかをテストする唯一の保証された方法は、 IMFTransform::SetOutputType を呼び出す方法です。

場合によっては、1 つ以上の入力型が設定されるまで、MFT は出力型のリストを返すことができません。 その場合、メソッドは MF_E_TRANSFORM_TYPE_NOT_SETを返します。

このメソッドを実装するために MFT は必要ありません。 ただし、サポートされている型が単純であり、 MFTGetInfo 関数を使用して検出できる場合を除き、ほとんどの MFT ではこのメソッドを実装する必要があります。

このメソッドは、 部分的 なメディアの種類を返すことができます。 部分メディアの種類には、形式の不完全な説明が含まれており、呼び出し元にヒントを提供するために使用されます。 たとえば、部分型には、メジャー型とサブタイプ GUID だけが含まれる場合があります。 ただし、クライアントが MFT に入力型を設定した後、MFT は通常、少なくとも 1 つの完全な出力型を返す必要があります。これは、これ以上変更せずに使用できます。 詳細については、「 完全メディアタイプと部分メディアタイプ」を参照してください。

一部の MFT では、MFT が最初の入力サンプルを受け取るまで、出力の種類の正確なリストを提供できません。 たとえば、MFT では、形式を推測するために最初のパケット ヘッダーを読み取る必要がある場合があります。 MFT では、この状況を次のように処理する必要があります。

  1. MFT は、入力を受け取る前に、1 つ以上の出力タイプのリストを提供します。このリストは、生成される可能性があります。 たとえば、MPEG-2 デコーダーは、MPEG-2 メイン プロファイル/メイン レベルを記述するメディアの種類を返す場合があります。
  2. クライアントは、これらの型 (通常は最初) のいずれかを選択し、出力ストリームに設定します。
  3. クライアントは、 IMFTransform::P rocessInput を呼び出して、最初の入力サンプルを提供します。
  4. 出力の種類が入力データに準拠していない場合、変換は ProcessOutput メソッドの形式変更を通知します。 書式の変更の詳細については、「 IMFTransform::P rocessOutput」を参照してください。
  5. GetOutputAvailableType を再度呼び出します。 この時点で、 メソッドは、入力データを反映する型の更新されたリストを返す必要があります。
  6. クライアントはこのリストから新しい出力の種類を選択し、 SetOutputType を呼び出します。
mftransform.h を含む前に MFT_UNIQUE_METHOD_NAMES が定義されている場合、このメソッドの名前は MFTGetOutputAvailableType に変更されます。 「ハイブリッド DMO/MFT オブジェクトの作成」を参照してください

実装に関する注意事項

MFT がメディアの種類を内部的に格納する場合、MFT は元の型へのポインターではなく、メディアの種類の複製を返す必要があります。 それ以外の場合、呼び出し元は型を変更し、MFT の内部状態を変更する可能性があります。

要件

要件
サポートされている最小のクライアント Windows Vista [デスクトップ アプリのみ | UWP アプリ]
サポートされている最小のサーバー Windows Server 2008 [デスクトップ アプリ | UWP アプリ]
対象プラットフォーム Windows
ヘッダー mftransform.h
Library Mfuuid.lib

こちらもご覧ください

IMFTransform

Media Foundation の変換