IMPEG2StreamIdMap
COM公式ドキュメント
このインターフェースは、MPEG-2 Demultiplexer フィルター (Demux) の各出力ピンに実装され、プログラムストリームモードでのみ使用されます。
メソッド 3
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
MapStreamId メソッドは、MPEG-2 プログラムストリーム内のエレメンタリーストリームの Stream ID を、メディアコンテンツタイプおよびサブストリームフィルタリング情報にマッピングします。
| ulStreamId | DWORD | in | PES ストリームの Stream ID。 |
| MediaSampleContent | DWORD | in | ストリームの内容を指定します。現在サポートされている唯一の値は MPEG2_PROGRAM_ELEMENTARY_STREAM (axextend.idl において 0x00000001 として定義) です。 |
| ulSubstreamFilterValue | DWORD | in | このエレメンタリーストリーム内のどのサブストリームを下流のデコーダーに渡すかを指定します。有効なフィルター値を格納できるのは下位バイトのみです。iDataOffset = 0 の場合、このパラメーターは無視されます。 |
| iDataOffset | INT | in | サブストリームが開始するペイロード内のバイトオフセット。 |
戻り値
成功した場合は S_OK を返します。メソッドが失敗した場合はエラーコードを返します。MEDIA_PROGRAM_STREAM_MAP、MEDIA_PROGRAM_DIRECTORY_PES_PACKET、または MEDIA_PROGRAM_PACK_HEADER の Stream ID を指定しようとした場合、このメソッドは E_NOTIMPL を返します。
解説(Remarks)
このメソッドでマッピングされる Stream ID は、PES ヘッダー内のストリーム ID です。サブストリームフィルタリングは、単一のオーディオストリーム上で複数のチャンネルを提供するために最も一般的に使用されます。
UnmapStreamId メソッドは、以前の MapStreamId 呼び出しで作成された Stream ID マッピングを解除します。
| culStreamId | DWORD | in | pulStreamID 配列の要素数。 |
| pulStreamId | DWORD* | in | このピンにマッピングされている Stream ID の配列。 |
戻り値
成功した場合は S_OK を返します。メソッドが失敗した場合は HRESULT エラーコードを返します。
解説(Remarks)
通常、1 つのピンにマッピングされるストリーム ID は 1 つのみであるため、pulStreamID には通常 1 つの要素のみが格納されます。
EnumStreamIdMap メソッドは、このピン上でマッピングされているすべての Stream ID のコレクションを返します。
| ppIEnumStreamIdMap | IEnumStreamIdMap** | out | 返されるコレクションが設定される IEnumStreamIdMap インターフェースポインター。 |
戻り値
成功した場合は S_OK を返します。メソッドが失敗した場合は HRESULT エラーコードを返します。
解説(Remarks)
現在、1 つのピンにマッピングされるストリーム ID は 1 つのみであるため、このコレクションには 1 つの項目のみが格納されます。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IMPEG2StreamIdMap "{D0E04C47-25B8-4369-925A-362A01D95444}" #usecom global IMPEG2StreamIdMap IID_IMPEG2StreamIdMap "{}" #comfunc global IMPEG2StreamIdMap_MapStreamId 3 int,int,int,int #comfunc global IMPEG2StreamIdMap_UnmapStreamId 4 int,var #comfunc global IMPEG2StreamIdMap_EnumStreamIdMap 5 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IMPEG2StreamIdMap "{D0E04C47-25B8-4369-925A-362A01D95444}" #usecom global IMPEG2StreamIdMap IID_IMPEG2StreamIdMap "{}" #comfunc global IMPEG2StreamIdMap_MapStreamId 3 int,int,int,int #comfunc global IMPEG2StreamIdMap_UnmapStreamId 4 int,sptr #comfunc global IMPEG2StreamIdMap_EnumStreamIdMap 5 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。