数値で入力を識別するには
[このページに関連付けられている機能である Windows Media Format 11 SDK は、従来の機能です。 ソース リーダーとシンク ライターに置き換わりました。 ソース リーダーとシンク ライターは、Windows 10とWindows 11用に最適化されています。 Microsoft では、可能であれば、新しいコードで Windows Media Format 11 SDK ではなくソース リーダーとシンク ライターを使用することを強くお勧めします。 Microsoft は、レガシ API を使用する既存のコードを、可能であれば新しい API を使用するように書き換えるよう提案しています。]
ライターに渡すすべてのサンプルは、入力番号に関連付けられている必要があります。 各入力番号は、ライターがファイルの書き込みに使用しているプロファイル内の 1 つ以上のストリームに対応します。 プロファイルでは、メディア ソースは接続名で識別されます。 ライターのプロファイルを設定すると、ライターは入力番号を各接続名に関連付けます。 ライターにサンプルを渡す前に、各入力で想定されているデータを決定する必要があります。 多くの場合、入力がプロファイル内のストリームと同じ順序になるとは想定できません。 したがって、入力とストリームを照合する唯一の信頼性の高い方法は、入力の接続名とストリームの接続名を比較することです。
読み込まれたプロファイルの接続名と対応する入力番号を識別するには、次の手順を実行します。
- ライター オブジェクトを作成し、使用するプロファイルを設定します。 ライターでプロファイルを設定する方法の詳細については、「ライター でプロファイルを使用するには」を参照してください。 プロファイル内のストリームに使用される接続名を知っている必要があります。 プロファイル内から接続名を取得するには、各ストリームのストリーム構成オブジェクトを取得し 、IWMStreamConfig::GetConnectionName を呼び出します。 プロファイルとストリーム構成オブジェクトの詳細については、「プロファイル の操作」を参照してください。
- IWMWriter::GetInputCount を呼び出して、入力の合計数を取得します。
- すべての入力をループ処理し、それぞれに対して次の手順を実行します。
- IWMWriter::GetInputProps を呼び出して、入力の IWMInputMediaProps インターフェイスを取得します。
- IWMInputMediaProps::GetConnectionName を呼び出して、入力番号に対応する接続名を取得します。 接続名を取得すると、ライターによって割り当てられた入力番号に関連付けられているストリームがわかります。
次のコード例では、各入力の接続名を表示します。 このコードの使用方法の詳細については、「コード 例の使用」を参照してください。
HRESULT GetNamesForInputs(IWMWriter* pWriter)
{
DWORD cInputs = 0;
HRESULT hr = S_OK;
WCHAR* pwszName = NULL;
WORD cchName = 0;
IWMInputMediaProps* pProps = NULL;
// Get the total number of inputs for the file.
hr = pWriter->GetInputCount(&cInputs);
GOTO_EXIT_IF_FAILED(hr);
// Loop through all supported inputs.
for (DWORD inputIndex = 0; inputIndex < cInputs; inputIndex++)
{
// Get the input properties for the input.
hr = pWriter->GetInputProps(inputIndex, &pProps);
GOTO_EXIT_IF_FAILED(hr);
// Get the size of the connection name.
hr = pProps->GetConnectionName(0, &cchName);
GOTO_EXIT_IF_FAILED(hr);
if (cchName > 0)
{
// Allocate memory for the connection name.
pwszName = new WCHAR[cchName];
if (wszName == NULL)
{
hr = E_OUTOFMEMORY;
goto Exit;
}
// Get the connection name.
hr = pProps->GetConnectionName(pwszName, &cchName);
GOTO_EXIT_IF_FAILED(hr);
// Display the name.
printf("Input # %d = %S\n", pwszName);
} // end if
// Clean up for next iteration.
SAFE_ARRAY_DELETE(pwszName);
SAFE_RELEASE(pProps);
} // end for inputIndex
Exit:
SAFE_ARRAY_DELETE(pwszName);
SAFE_RELEASE(pProps);
return hr;
}
関連トピック