IAMMultiMediaStream
COM公式ドキュメント
注意 このインターフェイスは非推奨です。新しいアプリケーションでは使用しないでください。IAMMultiMediaStream インターフェイスは、マルチメディアストリームオブジェクトによってサポートされます。このインターフェイスには、オブジェクトが管理する基盤となるフィルターグラフを作成するためのメソッドが含まれています。
メソッド 7
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
注意 このインターフェイスは非推奨です。新しいアプリケーションでは使用しないでください。Initialize メソッドは、マルチメディアストリームオブジェクトを初期化します。
| StreamType | STREAM_TYPE | in | STREAM_TYPE 列挙体のメンバーで、ストリームが読み取り専用、書き込み専用、または読み書き可能のいずれであるかを指定します。 | ||||||
| dwFlags | DWORD | in | 次のいずれかの値である必要があります:
| ||||||
| pFilterGraph | IGraphBuilder* | in | [省略可能] IGraphBuilder インターフェイスへのポインター、または NULL。このパラメーターが NULL 以外の場合、マルチメディアストリームオブジェクトが使用するフィルターグラフを指定します。それ以外の場合、マルチメディアストリームオブジェクトは新しいフィルターグラフを作成します。 |
戻り値
解説(Remarks)
dwFlags パラメーターに AMMSF_NOGRAPHTHREAD を指定した場合、呼び出し元のスレッドはウィンドウメッセージを処理する必要があり、スレッドが終了する前にすべてのマルチメディアストリーミングオブジェクトを解放する必要があります。そうしないと、アプリケーションがデッドロックする可能性があります。
注意 このインターフェイスは非推奨です。新しいアプリケーションでは使用しないでください。GetFilterGraph メソッドは、マルチメディアストリームオブジェクトによって管理されるフィルターグラフマネージャーを取得します。
| ppGraphBuilder | IGraphBuilder** | out | IGraphBuilder インターフェイスポインターを受け取る変数のアドレス。マルチメディアストリームオブジェクトに関連付けられたフィルターグラフがない場合、返されるポインターは NULL になります。 |
戻り値
解説(Remarks)
メソッドが成功し、*ppGraphBuilder が NULL 以外の場合、呼び出し元は IGraphBuilder ポインターを解放する必要があります。
注意 このインターフェイスは非推奨です。新しいアプリケーションでは使用しないでください。GetFilter メソッドは、マルチメディアストリームオブジェクトが内部的に使用するメディアストリームフィルターを取得します。
| ppFilter | IMediaStreamFilter** | out | IMediaStreamFilter インターフェイスポインターを受け取る変数のアドレス。 |
戻り値
解説(Remarks)
アプリケーションはこのメソッドを呼び出さないでください。IMediaStreamFilter インターフェイスは、アプリケーションでの使用を意図したものではありません。
メソッドが成功した場合、呼び出し元は IMediaStreamFilter インターフェイスを解放する必要があります。
注意 このインターフェイスは非推奨です。新しいアプリケーションでは使用しないでください。AddMediaStream メソッドは、新しいメディアストリームをフィルターグラフに追加します。
| pStreamObject | IUnknown* | in | 新しいメディアストリームの作成に使用されるオブジェクトの IUnknown インターフェイスへのポインター。このパラメーターは NULL にすることができます。詳細については「解説」を参照してください。 | ||||||||||
| PurposeId | GUID* | in | 作成するメディアストリームの種類を指定する MSPID へのポインター。このパラメーターは NULL にすることができます。 | ||||||||||
| dwFlags | DWORD | in | 次のフラグの 0 個以上のビットごとの組み合わせ。
| ||||||||||
| ppNewStream | IMediaStream** | out | IMediaStream インターフェイスポインターを受け取る変数のアドレス。 |
戻り値
HRESULT 値を返します。取り得る値には次のものが含まれます。
| 戻り値 | 説明 |
|---|---|
| 無効な引数。 | |
| NULL ポインター引数。 | |
|
無効な purpose ID。 |
| 成功。 |
解説(Remarks)
pPurposeID が NULL の場合、pStreamObject は IMediaStream オブジェクトを指定する必要があります。オブジェクトの GetInformation メソッドを使用して purpose ID を判定し、それを使って新しいメディアストリームを作成します。
purpose ID が MSPID_PrimaryAudio で、dwFlags に AMMSF_ADDDEFAULTRENDERER フラグが含まれている場合、このメソッドは DirectSound Renderer をフィルターグラフに追加します。
dwFlags に AMMSF_CREATEPEER フラグが含まれている場合、このメソッドは pStreamObject で指定されたオブジェクトを使用して新しいメディアストリームを作成します。その場合、pStreamObject には次のいずれかを指定できます:
- IAMMediaStream ポインター。
- IMediaStream ポインター。
- IDirectDraw ポインター。
- IAMMediaStream ポインター。オブジェクトがマルチメディアストリームに追加されます。
- IDirectDraw ポインター。DirectDraw オブジェクトを使用してデフォルトのビデオストリームを作成します。
- NULL。デフォルトのメディアストリームオブジェクトが作成されます。
注意 このインターフェイスは非推奨です。新しいアプリケーションでは使用しないでください。OpenFile メソッドは、指定されたメディアファイルを開き、そのためのフィルターグラフを自動的に作成します。DirectShow がそのファイル形式をサポートしていない場合、このメソッドは何も行いません。
| pszFileName | LPWSTR | in | 開きたいファイルの名前へのポインター。 | ||||||||||||
| dwFlags | DWORD | in | フィルターグラフが指定されたファイルをどのようにレンダリングするかを変更する値。この値は、次のフラグの 1 つ以上の組み合わせです。
|
戻り値
次のいずれかの値を返します。
| 戻り値 | 説明 |
|---|---|
| dwFlags パラメーターが無効です。 | |
| このメソッドは無効なポインターにアクセスしようとしました。 | |
| 成功。 |
解説(Remarks)
AMMSF_RENDERALLSTREAMS フラグは、ビデオとオーディオのデフォルトレンダリングフィルターが存在しない場合にそれらを作成します。ただし、これらのデフォルトフィルターは IStreamSample::GetMediaStream メソッドではアクセスできません。
注意 このインターフェイスは非推奨です。新しいアプリケーションでは使用しないでください。OpenMoniker メソッドは、ファイルまたはデバイスのモニカーを開きます。DirectShow がそのモニカーをサポートしている場合、このモニカーからメディアデータを読み取ることができます。
| pCtx | IBindCtx* | in | モニカーに関連付けられたバインドコンテキストへのポインター。 | ||||||||||||
| pMoniker | IMoniker* | in | 開きたいモニカーを指定する IMoniker インターフェイスへのポインター。 | ||||||||||||
| dwFlags | DWORD | in | フィルターグラフが指定されたファイルをどのようにレンダリングするかを変更する値。この値は、次のフラグの 1 つ以上の組み合わせです。
|
戻り値
成功した場合は S_OK を、dwFlags パラメーターが無効な場合は E_INVALIDARG を返します。
注意 このインターフェイスは非推奨です。新しいアプリケーションでは使用しないでください。Render メソッドは、現在のフィルターグラフをレンダリングします。
| dwFlags | DWORD | in | フィルターグラフが現在のマルチメディアストリームをどのようにレンダリングするかを指定する値。この値は現在、AMMSF_NOCLOCK でなければなりません。 |
戻り値
成功した場合は S_OK を、dwFlags パラメーターが無効な場合は E_INVALIDARG を返します。
解説(Remarks)
このメソッドは、STREAMTYPE_WRITE 型のストリームについて各ソースストリームをレンダリングします。これは複数回呼び出すことができます。たとえば、ソースストリームが追加されるたびに呼び出すことができますが、その際ストリームは実行モードには設定されません。このメソッドを呼び出した後、ストリームを実行モードにするには IMultiMediaStream::SetState メソッドを使用します。
AMMSF_RENDERALLSTREAMS フラグは、ビデオとオーディオのデフォルトレンダリングストリームが存在しない場合にそれらを作成します。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IAMMultiMediaStream "{BEBE595C-9A6F-11D0-8FDE-00C04FD9189D}" #usecom global IAMMultiMediaStream IID_IAMMultiMediaStream "{}" #comfunc global IAMMultiMediaStream_Initialize 12 int,int,sptr #comfunc global IAMMultiMediaStream_GetFilterGraph 13 sptr #comfunc global IAMMultiMediaStream_GetFilter 14 sptr #comfunc global IAMMultiMediaStream_AddMediaStream 15 sptr,var,int,sptr #comfunc global IAMMultiMediaStream_OpenFile 16 wstr,int #comfunc global IAMMultiMediaStream_OpenMoniker 17 sptr,sptr,int #comfunc global IAMMultiMediaStream_Render 18 int ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IAMMultiMediaStream "{BEBE595C-9A6F-11D0-8FDE-00C04FD9189D}" #usecom global IAMMultiMediaStream IID_IAMMultiMediaStream "{}" #comfunc global IAMMultiMediaStream_Initialize 12 int,int,sptr #comfunc global IAMMultiMediaStream_GetFilterGraph 13 sptr #comfunc global IAMMultiMediaStream_GetFilter 14 sptr #comfunc global IAMMultiMediaStream_AddMediaStream 15 sptr,sptr,int,sptr #comfunc global IAMMultiMediaStream_OpenFile 16 wstr,int #comfunc global IAMMultiMediaStream_OpenMoniker 17 sptr,sptr,int #comfunc global IAMMultiMediaStream_Render 18 int ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。