IPAT
COM公式ドキュメント
IPAT インターフェースを使用すると、クライアントは Program Association Table (PAT) から情報を取得できます。このインターフェースへのポインターは、IAtscPsipParser::GetPAT メソッドが返します。
メソッド 11
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
Initialize メソッドは、キャプチャしたテーブルセクションのデータを使用してオブジェクトを初期化します。このメソッドは IAtscPsipParser::GetPAT メソッドによって内部的に呼び出されるため、通常、アプリケーションはこのメソッドを呼び出すべきではありません。
| pSectionList | ISectionList* | in | セクションデータを含む SectionList オブジェクトの ISectionList インターフェースへのポインター。 |
| pMPEGData | IMpeg2Data* | in | MPEG-2 Sections and Tables フィルターの IMpeg2Data インターフェースへのポインター。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には次の表のものが含まれます。
| 戻り値 | 説明 |
|---|---|
| 引数が無効です。 | |
| オブジェクトはすでに初期化されています。 | |
| メソッドは成功しました。 |
GetTransportStreamId メソッドは、PAT のトランスポートストリーム識別子 (TSID) を返します。
| pwVal | WORD* | out | transport_stream_id フィールドを受け取ります。 |
戻り値
GetVersionNumber メソッドは、PAT のバージョン番号を返します。
| pbVal | BYTE* | out | version_number フィールドを受け取ります。 |
戻り値
GetCountOfRecords メソッドは、PAT 内のレコード数を返します。各レコードは 1 つのプログラムに対応します。
| pdwVal | DWORD* | out | レコード数を受け取ります。 |
戻り値
GetRecordProgramNumber メソッドは、PAT からプログラム番号を取得します。
| dwIndex | DWORD | in | 取得するレコードを指定します。インデックスは 0 から始まります。PAT 内のレコード数を取得するには、IPAT::GetCountOfRecords メソッドを呼び出します。 |
| pwVal | WORD* | out | プログラム番号を受け取ります。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には次の表のものが含まれます。
| 戻り値 | 説明 |
|---|---|
| NULL ポインター引数です。 | |
| インデックスが範囲外です。 | |
| メソッドは成功しました。 |
GetRecordProgramMapPid メソッドは、PAT 内の指定したレコードのパケット識別子 (PID) を返します。
| dwIndex | DWORD | in | 取得するレコードを指定します。インデックスは 0 から始まります。PAT 内のレコード数を取得するには、IPAT::GetCountOfRecords メソッドを呼び出します。 |
| pwVal | WORD* | out | PID を受け取ります。この値は、関連するプログラムの program map table (PMT) を含むパケットの PID を示します。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には次の表のものが含まれます。
| 戻り値 | 説明 |
|---|---|
| NULL ポインター引数です。 | |
| インデックスが範囲外です。 | |
| メソッドは成功しました。 |
FindRecordProgramMapPid メソッドは、指定したプログラム番号に関連付けられた program map table (PMT) のパケット識別子 (PID) を返します。
| wProgramNumber | WORD | in | プログラム番号を指定します。 |
| pwVal | WORD* | out | PID を受け取ります。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には次の表のものが含まれます。
| 戻り値 | 説明 |
|---|---|
| NULL ポインター引数です。 | |
| テーブルに指定されたプログラム番号が含まれていません。 | |
| メソッドは成功しました。 |
RegisterForNextTable メソッドは、current テーブルを置き換える next テーブルが到着したときに通知を受け取るよう、クライアントを登録します。
| hNextTableAvailable | HANDLE | in | 呼び出し元が作成したイベントへのハンドル。next テーブルが到着すると、オブジェクトはこのイベントをシグナル状態にします。イベントがシグナル状態になったら、IPAT::GetNextTable メソッドを呼び出してテーブルを取得します。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には次の表のものが含まれます。
| 戻り値 | 説明 |
|---|---|
| このテーブルはすでに next テーブルです。 | |
| 引数が無効です。hNextTableAvailable を NULL にすることはできません。 | |
| メソッドはすでに呼び出されています。 | |
| メソッドは成功しました。 |
解説(Remarks)
このメソッドは current テーブルにのみ適用されます。それ以外の場合、このメソッドは E_ACCESSDENIED を返します。
GetNextTable メソッドは、current テーブルに続く next テーブルを取得します。
| ppPAT | IPAT** | out | IPAT インターフェースポインターを受け取る変数のアドレス。呼び出し元はこのインターフェースを解放する必要があります。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には次の表のものが含まれます。
| 戻り値 | 説明 |
|---|---|
| このテーブルは current ではありません。 | |
| 失敗しました。 | |
| メソッドは成功しました。 |
解説(Remarks)
このメソッドは current テーブルにのみ適用されます。それ以外の場合、このメソッドは E_ACCESSDENIED を返します。
RegisterForWhenCurrent メソッドは、テーブルが current になったときに通知を受け取るよう、クライアントを登録します。
| hNextTableIsCurrent | HANDLE | in | 呼び出し元が作成したイベントへのハンドル。テーブルが current になると、オブジェクトはこのイベントをシグナル状態にします。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には次の表のものが含まれます。
| 戻り値 | 説明 |
|---|---|
| このテーブルはすでに current テーブルです。 | |
| 引数が無効です。hNextTableIsCurrent を NULL にすることはできません。 | |
| メソッドはすでに呼び出されています。 | |
| メソッドは成功しました。 |
解説(Remarks)
このメソッドは next テーブルにのみ適用されます。それ以外の場合、このメソッドは E_ACCESSDENIED を返します。
ConvertNextToCurrent メソッドは、next テーブルを current テーブルに変換します。
戻り値
このメソッドは HRESULT を返します。取り得る値には次の表のものが含まれます。
| 戻り値 | 説明 |
|---|---|
| このテーブルはすでに current です。 | |
| RegisterForWhenCurrent メソッドが呼び出されていません。 | |
| 新しい current テーブルの形式が正しくありません。 | |
| メソッドは成功しました。 |
解説(Remarks)
このメソッドは、current になった next テーブルにのみ適用されます。このメソッドを呼び出す前に、IPAT::RegisterForWhenCurrent を呼び出し、イベントがシグナル状態になるのを待ちます。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IPAT "{6623B511-4B5F-43C3-9A01-E8FF84188060}" #usecom global IPAT IID_IPAT "{}" #comfunc global IPAT_Initialize 3 sptr,sptr #comfunc global IPAT_GetTransportStreamId 4 var #comfunc global IPAT_GetVersionNumber 5 var #comfunc global IPAT_GetCountOfRecords 6 var #comfunc global IPAT_GetRecordProgramNumber 7 int,var #comfunc global IPAT_GetRecordProgramMapPid 8 int,var #comfunc global IPAT_FindRecordProgramMapPid 9 int,var #comfunc global IPAT_RegisterForNextTable 10 sptr #comfunc global IPAT_GetNextTable 11 sptr #comfunc global IPAT_RegisterForWhenCurrent 12 sptr #comfunc global IPAT_ConvertNextToCurrent 13 ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IPAT "{6623B511-4B5F-43C3-9A01-E8FF84188060}" #usecom global IPAT IID_IPAT "{}" #comfunc global IPAT_Initialize 3 sptr,sptr #comfunc global IPAT_GetTransportStreamId 4 sptr #comfunc global IPAT_GetVersionNumber 5 sptr #comfunc global IPAT_GetCountOfRecords 6 sptr #comfunc global IPAT_GetRecordProgramNumber 7 int,sptr #comfunc global IPAT_GetRecordProgramMapPid 8 int,sptr #comfunc global IPAT_FindRecordProgramMapPid 9 int,sptr #comfunc global IPAT_RegisterForNextTable 10 sptr #comfunc global IPAT_GetNextTable 11 sptr #comfunc global IPAT_RegisterForWhenCurrent 12 sptr #comfunc global IPAT_ConvertNextToCurrent 13 ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。