IMpeg2Demultiplexer
COM公式ドキュメント
このインターフェイスは MPEG-2 Demultiplexer フィルター (Demux) に実装されており、プログラムストリームモードとトランスポートストリームモードの両方で使用されます。
メソッド 3
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
CreateOutputPin メソッドは、Demux 上に新しい出力ピンを作成します。
| pMediaType | AM_MEDIA_TYPE* | in | 新しいピンのメディアタイプ情報を指定する AM_MEDIA_TYPE 構造体へのポインター。 |
| pszPinName | LPWSTR | in | 新しいピンの名前を指定するワイド文字列へのポインター。最大長は NULL 終端文字を含めて 128 文字です。 |
| ppIPin | IPin** | out | ピンの IPin インターフェイスへのポインターを受け取る変数のアドレス。 |
戻り値
HRESULT 値を返します。返される可能性のある値には次のものがあります。
| 戻り値 | 説明 |
|---|---|
| 無効な引数です。 | |
| 成功しました。 | |
| ピン名が重複しています。 |
解説(Remarks)
ピン名の重複は許可されません。ピンを構成するには、返された IPin インターフェイスに対して、(プログラムストリームの場合は) IMPEG2StreamIdMap インターフェイスを、(トランスポートストリームの場合は) IMPEG2PIDMap インターフェイスをクエリします。最初の出力ピンでどちらのインターフェイスがクエリされたかに応じて、Demux はトランスポートストリームモードまたはプログラムストリームモードのいずれかに自身を構成します。Demux が構成されると、もう一方のインターフェイスを取得するための QueryInterface の呼び出しはすべて失敗します。
SetOutputPinMediaType メソッドは、指定された出力ピンのメディアタイプを更新します。(DirectX 9.0 以降。)
| pszPinName | LPWSTR | in | CreateOutputPin の呼び出しでピンが作成されたときに指定された、ピンのフレンドリ名。 |
| pMediaType | AM_MEDIA_TYPE* | in | ピンの新しいメディアタイプ情報を指定する AM_MEDIA_TYPE 構造体へのポインター。 |
戻り値
成功した場合は S_OK を返します。メソッドが失敗した場合は HRESULT エラーコードを返します。
解説(Remarks)
ピンは新しいメディアタイプでいつでも再構成できます。接続が存在しない場合は、メディアタイプが更新されるだけです。ピンが接続されている場合、呼び出しの成否は、下流の入力ピンが指定されたメディアタイプを受け入れるか拒否するかによって決まります。
メディアタイプは Demultiplexer フィルターによって解釈されることは一切ありません。出力ピンによる接続ネゴシエーションの間にのみ使用されます。メディアサンプルの内容には影響しません。メディアサンプルの内容は、IMPEG2PIDMap::MapPID メソッドの MEDIA_SAMPLE_CONTENT パラメーターを介して、または IMPEG2StreamIdMap::MapStreamId の呼び出しで定義された値を介して PID がマッピングされるときに定義されます。
DeleteOutputPin メソッドは、指定された出力ピンを削除します。
| pszPinName | LPWSTR | in | CreateOutputPin の呼び出しでピンが作成されたときに指定された、ピンのフレンドリ名。 |
戻り値
成功した場合は S_OK を返します。メソッドが失敗した場合は HRESULT エラーコードを返します。
解説(Remarks)
このメソッドは、フィルターを存続させたままピンを削除する必要がある場合にのみ呼び出してください。フィルターが解放されると、出力ピンに対して必要なクリーンアップがすべて実行されます。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IMpeg2Demultiplexer "{436EEE9C-264F-4242-90E1-4E330C107512}" #usecom global IMpeg2Demultiplexer IID_IMpeg2Demultiplexer "{}" #comfunc global IMpeg2Demultiplexer_CreateOutputPin 3 var,wstr,sptr #comfunc global IMpeg2Demultiplexer_SetOutputPinMediaType 4 wstr,var #comfunc global IMpeg2Demultiplexer_DeleteOutputPin 5 wstr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IMpeg2Demultiplexer "{436EEE9C-264F-4242-90E1-4E330C107512}" #usecom global IMpeg2Demultiplexer IID_IMpeg2Demultiplexer "{}" #comfunc global IMpeg2Demultiplexer_CreateOutputPin 3 sptr,wstr,sptr #comfunc global IMpeg2Demultiplexer_SetOutputPinMediaType 4 wstr,sptr #comfunc global IMpeg2Demultiplexer_DeleteOutputPin 5 wstr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。