IWMMediaProps
COM公式ドキュメント
IWMMediaProps インターフェイスは、入力、ストリーム、または出力に対する WM_MEDIA_TYPE 構造体を設定および取得します。入力とストリームの場合、メディアタイプ構造体の内容によって、ファイルの書き込み時にライターオブジェクトが入力データに対して実行する処理が決まります。通常、入力のメディアタイプは非圧縮タイプであり、ストリームは圧縮タイプであるため、それぞれのメディアタイプ構造体の内容によって、ライターがストリームを圧縮するコーデックに渡す設定が決まります。出力の場合、メディアタイプ構造体は、ストリームの内容を展開するために使用される設定を決定します。Windows Media コーデックは、さまざまな形式で出力コンテンツを提供できます。IWMMediaProps のメソッドは IWMVideoMediaProps に継承され、ビデオメディアタイプを指定するための追加設定へのアクセスを提供します。これらのメソッドは IWMInputMediaProps および IWMOutputMediaProps にも継承されます。IWMMediaProps インターフェイスのインスタンスは、すべてのストリーム構成オブジェクト、入力メディアプロパティオブジェクト、および出力メディアプロパティオブジェクトに存在します。これらのオブジェクトのいずれかに含まれる他のインターフェイスの QueryInterface メソッドを呼び出すことで、このインターフェイスへのポインターを取得できます。
メソッド 3
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
GetType メソッドは、現在の IWMMediaProps インターフェイスが属するオブジェクトによって記述されるストリーム、入力、または出力内のメディアのメジャータイプを取得します。
| pguidType | GUID* | out | メディアタイプを指定する GUID へのポインター。 |
戻り値
このメソッドは HRESULT を返します。指定できる値には次の表のものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| pguidType パラメーターが NULL です。 |
解説(Remarks)
これらのメディアタイプは、ライター、リーダー、およびプロファイルの各オブジェクトによって、メディアタイプに固有のメディアストリームのプロパティを識別するために使用されます。
GetType は利便性のために提供されており、WM_MEDIA_TYPE の majortype メンバーと同じ値を返します。
GetMediaType メソッドは、メディアタイプを記述する構造体を取得します。
| pType | WM_MEDIA_TYPE* | out | WM_MEDIA_TYPE 構造体へのポインター。このパラメーターが NULL に設定されている場合、このメソッドは必要なバッファーのサイズを pcbType パラメーターに返します。 |
| pcbType | DWORD* | inout | 入力時には、pType バッファーのサイズです。出力時には、pType が NULL に設定されている場合、これが指す値はメディアタイプ構造体を保持するために必要なバッファーのサイズに設定されます。 |
戻り値
このメソッドは HRESULT を返します。指定できる値には次の表のものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| pcbType パラメーターが NULL です。 | |
|
pcbType パラメーターが十分な大きさではありません。 |
解説(Remarks)
GetMediaType は 2 回呼び出す必要があります。1 回目の呼び出しでは、pType として NULL を渡します。戻り時に、pcbType の値が WM_MEDIA_TYPE 構造体を保持するために必要なバッファーサイズに設定されます。その後、必要なサイズのバッファーを割り当て、2 回目の呼び出しでそのポインターを pType として渡すことができます。
SetMediaType メソッドは、メディアタイプを指定します。
| pType | WM_MEDIA_TYPE* | in | 入力、ストリーム、または出力を記述する WM_MEDIA_TYPE 構造体へのポインター。 |
戻り値
このメソッドは HRESULT を返します。指定できる値には次の表のものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| pType パラメーターが NULL であるか、cbFormat が 0 もしくは大きすぎるか、または pbFormat が NULL です。 | |
| 使用可能なメモリが不足しています。 |
解説(Remarks)
このメソッドでメディアタイプの設定に成功しても、最終的にプロファイルがライターに設定される際に無効として拒否される場合があります。ライターがプロファイルに対して実行するテストの一覧については、IWMWriter::SetProfile を参照してください。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IWMMediaProps "{96406BCE-2B2B-11D3-B36B-00C04F6108FF}" #usecom global IWMMediaProps IID_IWMMediaProps "{}" #comfunc global IWMMediaProps_GetType 3 var #comfunc global IWMMediaProps_GetMediaType 4 var,var #comfunc global IWMMediaProps_SetMediaType 5 var ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。#define global IID_IWMMediaProps "{96406BCE-2B2B-11D3-B36B-00C04F6108FF}" #usecom global IWMMediaProps IID_IWMMediaProps "{}" #comfunc global IWMMediaProps_GetType 3 sptr #comfunc global IWMMediaProps_GetMediaType 4 sptr,sptr #comfunc global IWMMediaProps_SetMediaType 5 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。