IPMT
COM公式ドキュメント
IPMT インターフェースを使用すると、クライアントは program map table (PMT) から情報を取得できます。
メソッド 19
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
Initialize メソッドは、キャプチャしたテーブルのセクションデータを使用してオブジェクトを初期化します。このメソッドは IAtscPsipParser::GetPMT メソッドによって内部的に呼び出されるため、通常、アプリケーションから呼び出すべきではありません。
| pSectionList | ISectionList* | in | セクションデータを格納する SectionList オブジェクトの ISectionList インターフェースへのポインター。 |
| pMPEGData | IMpeg2Data* | in | MPEG-2 Sections and Tables フィルターの IMpeg2Data インターフェースへのポインター。 |
戻り値
このメソッドは HRESULT を返します。返される可能性のある値には、次の表に示すものがあります。
| リターンコード | 説明 |
|---|---|
| 引数が無効です。 | |
| オブジェクトは既に初期化されています。 | |
| メソッドは成功しました。 |
GetProgramNumber メソッドは、PMT の program number を返します。
| pwVal | WORD* | out | program_number フィールドを受け取ります。 |
戻り値
このメソッドは HRESULT を返します。返される可能性のある値には、次の表に示すものがあります。
| リターンコード | 説明 |
|---|---|
| NULL ポインター引数です。 | |
| メソッドは成功しました。 |
GetVersionNumber メソッドは、PMT の version number を返します。
| pbVal | BYTE* | out | version_number フィールドを受け取ります。 |
戻り値
このメソッドは HRESULT を返します。返される可能性のある値には、次の表に示すものがあります。
| リターンコード | 説明 |
|---|---|
| NULL ポインター引数です。 | |
| メソッドは成功しました。 |
GetPcrPid メソッドは、このプログラムの Program Clock Reference (PCR) フィールドを含むパケットのパケット識別子 (PID) を返します。
| pPidVal | WORD* | out | PCR_PID フィールドを受け取ります。 |
戻り値
このメソッドは HRESULT を返します。返される可能性のある値には、次の表に示すものがあります。
| リターンコード | 説明 |
|---|---|
| NULL ポインター引数です。 | |
| メソッドは成功しました。 |
GetCountOfTableDescriptors メソッドは、PMT 内のテーブル全体の記述子の数を返します。
| pdwVal | DWORD* | out | 記述子の数を受け取ります。 |
戻り値
このメソッドは HRESULT を返します。返される可能性のある値には、次の表に示すものがあります。
| リターンコード | 説明 |
|---|---|
| NULL ポインター引数です。 | |
| メソッドは成功しました。 |
GetTableDescriptorByIndex メソッドは、PMT のテーブル全体の記述子を取得します。
| dwIndex | DWORD | in | 取得する記述子を 0 から始まるインデックスで指定します。PMT 内のテーブル記述子の数を取得するには、IPMT::GetCountOfTableDescriptors メソッドを呼び出します。 |
| ppDescriptor | IGenericDescriptor** | out | IGenericDescriptor インターフェースポインターを受け取る変数のアドレス。このインターフェースを使用して、記述子内の情報を取得します。呼び出し元はインターフェースを解放する必要があります。 |
戻り値
このメソッドは HRESULT を返します。返される可能性のある値には、次の表に示すものがあります。
| リターンコード | 説明 |
|---|---|
| NULL ポインター引数です。 | |
| インデックスが範囲外です。 | |
| メソッドは成功しました。 |
GetTableDescriptorByTag メソッドは、指定された記述子タグを持つテーブル全体の記述子を PMT 内で検索します。
| bTag | BYTE | in | 検索する記述子タグを指定します。 |
| pdwCookie | DWORD* | inout | 記述子リスト内の検索開始位置を指定する変数へのポインター。このパラメーターは省略可能です。pdwCookie の値が NULL の場合、検索はリスト内の最初の記述子から開始されます。それ以外の場合は、pdwCookie で指定された位置から検索が開始されます。メソッドが復帰するとき、pdwCookie パラメーターには、次に一致する記述子があればその位置が格納されます。このパラメーターを使用して記述子リストを反復処理し、特定の記述子タグのすべての出現箇所を検索できます。 |
| ppDescriptor | IGenericDescriptor** | out | IGenericDescriptor インターフェースポインターを受け取る変数のアドレス。このインターフェースを使用して、記述子内の情報を取得します。呼び出し元はインターフェースを解放する必要があります。 |
戻り値
このメソッドは HRESULT を返します。返される可能性のある値には、次の表に示すものがあります。
| リターンコード | 説明 |
|---|---|
| インデックスが範囲外です。 | |
| 指定されたタグが見つかりませんでした。 | |
| レコードには、このタグを持つ記述子がさらに 1 つ以上含まれています。 | |
| レコードには、このタグを持つ記述子はこれ以上含まれていません。 | |
| メソッドは成功しました。 |
解説(Remarks)
pdwCookie の値が NULL でない場合、メソッドは MPEG2_S_NO_MORE_DATA_AVAILABLE または MPEG2_S_MORE_DATA_AVAILABLE のいずれかを返し、検索条件に一致する追加のタグが MGT に含まれているかどうかを示します。
GetCountOfRecords メソッドは、PMT 内のレコードの数を返します。各レコードは、プログラム内のストリームに対応します。
| pwVal | WORD* | out | レコードの数を受け取ります。 |
戻り値
このメソッドは HRESULT を返します。返される可能性のある値には、次の表に示すものがあります。
| リターンコード | 説明 |
|---|---|
| NULL ポインター引数です。 | |
| メソッドは成功しました。 |
GetRecordStreamType メソッドは、プログラム内の指定された elementary stream の stream type を返します。
| dwRecordIndex | DWORD | in | レコード番号を 0 から始まるインデックスで指定します。PMT 内のレコードの数を取得するには、IPMT::GetCountOfRecords メソッドを呼び出します。 |
| pbVal | BYTE* | out | stream_type フィールドを受け取ります。 |
戻り値
このメソッドは HRESULT を返します。返される可能性のある値には、次の表に示すものがあります。
| リターンコード | 説明 |
|---|---|
| NULL ポインター引数です。 | |
| インデックスが範囲外です。 | |
| メソッドは成功しました。 |
GetRecordElementaryPid メソッドは、プログラム内の指定された elementary stream のパケット識別子 (PID) を返します。
| dwRecordIndex | DWORD | in | レコード番号を 0 から始まるインデックスで指定します。PMT 内のレコードの数を取得するには、IPMT::GetCountOfRecords メソッドを呼び出します。 |
| pPidVal | WORD* | out | elementary_PID フィールドを受け取ります。 |
戻り値
このメソッドは HRESULT を返します。返される可能性のある値には、次の表に示すものがあります。
| リターンコード | 説明 |
|---|---|
| NULL ポインター引数です。 | |
| インデックスが範囲外です。 | |
| メソッドは成功しました。 |
GetRecordCountOfDescriptors メソッドは、PMT 内のレコードの記述子の数を返します。
| dwRecordIndex | DWORD | in | レコード番号を 0 から始まるインデックスで指定します。PMT 内のレコードの数を取得するには、IPMT::GetCountOfRecords メソッドを呼び出します。 |
| pdwVal | DWORD* | out | 記述子の数を受け取ります。 |
戻り値
このメソッドは HRESULT を返します。返される可能性のある値には、次の表に示すものがあります。
| リターンコード | 説明 |
|---|---|
| NULL ポインター引数です。 | |
| インデックスが範囲外です。 | |
| メソッドは成功しました。 |
GetRecordDescriptorByIndex メソッドは、PMT 内の指定されたレコードの記述子を取得します。
| dwRecordIndex | DWORD | in | レコード番号を 0 から始まるインデックスで指定します。PMT 内のレコードの数を取得するには、IPMT::GetCountOfRecords メソッドを呼び出します。 |
| dwDescIndex | DWORD | in | 取得する記述子を 0 から始まるインデックスで指定します。特定のレコードの記述子の数を取得するには、IPMT::GetRecordCountOfDescriptors メソッドを呼び出します。 |
| ppDescriptor | IGenericDescriptor** | out | IGenericDescriptor インターフェースポインターを受け取る変数のアドレス。このインターフェースを使用して、記述子内の情報を取得します。呼び出し元はインターフェースを解放する必要があります。 |
戻り値
このメソッドは HRESULT を返します。返される可能性のある値には、次の表に示すものがあります。
| リターンコード | 説明 |
|---|---|
| NULL ポインター引数です。 | |
| インデックスが範囲外です。 | |
| メソッドは成功しました。 |
GetRecordDescriptorByTag メソッドは、指定された記述子タグを持つ記述子を PMT 内のレコードで検索します。
| dwRecordIndex | DWORD | in | レコード番号を 0 から始まるインデックスで指定します。PMT 内のレコードの数を取得するには、IPMT::GetCountOfRecords メソッドを呼び出します。 |
| bTag | BYTE | in | 検索する記述子タグを指定します。 |
| pdwCookie | DWORD* | inout | 記述子リスト内の検索開始位置を指定する変数へのポインター。このパラメーターは省略可能です。pdwCookie の値が NULL の場合、検索はリスト内の最初の記述子から開始されます。それ以外の場合は、pdwCookie で指定された位置から検索が開始されます。メソッドが復帰するとき、pdwCookie パラメーターには、次に一致する記述子があればその位置が格納されます。このパラメーターを使用して記述子リストを反復処理し、特定の記述子タグのすべての出現箇所を検索できます。 |
| ppDescriptor | IGenericDescriptor** | out | IGenericDescriptor インターフェースポインターを受け取る変数のアドレス。このインターフェースを使用して、記述子内の情報を取得します。呼び出し元はインターフェースを解放する必要があります。 |
戻り値
このメソッドは HRESULT を返します。返される可能性のある値には、次の表に示すものがあります。
| リターンコード | 説明 |
|---|---|
| インデックスが範囲外です。 | |
| 指定されたタグが見つかりませんでした。 | |
| レコードには、このタグを持つ記述子がさらに 1 つ以上含まれています。 | |
| レコードには、このタグを持つ記述子はこれ以上含まれていません。 | |
| メソッドは成功しました。 |
解説(Remarks)
pdwCookie の値が NULL でない場合、メソッドは MPEG2_S_NO_MORE_DATA_AVAILABLE または MPEG2_S_MORE_DATA_AVAILABLE のいずれかを返し、検索条件に一致する追加のタグがレコードに含まれているかどうかを示します。
QueryServiceGatewayInfo メソッドは、PMT 内に DSM-CC service gateway 情報があれば、それを返します。
| ppDSMCCList | DSMCC_ELEMENT** | out | DSMCC_ELEMENT 構造体の配列へのポインターを受け取る変数のアドレス。クライアントは CoTaskMemFree 関数を呼び出して配列を解放する必要があります。 |
| puiCount | DWORD* | out | ppDSMCCList で返される要素の数を受け取ります。 |
戻り値
このメソッドは HRESULT を返します。返される可能性のある値には、次の表に示すものがあります。
| リターンコード | 説明 |
|---|---|
| メモリが不足しています。 | |
| NULL ポインター引数です。 | |
| テーブルの形式が正しくありません。 | |
| PMT で service gateway 情報が見つかりました。 | |
| PMT で service gateway 情報が見つかりませんでした。 |
解説(Remarks)
メソッドが成功した場合、前の表に示した 2 つの成功コードのいずれかを返します。PMT に service gateway 情報が含まれている場合は MPEG2_S_SG_INFO_FOUND を返し、PMT に service gateway 情報が含まれていない場合は MPEG2_S_SG_INFO_NOT_FOUND を返します。
QueryMPEInfo メソッドは、PMT 内に multi-protocol encapsulation (MPE) 情報があれば、それを返します。
| ppMPEList | MPE_ELEMENT** | out | MPE_ELEMENT 構造体の配列へのポインターを受け取る変数のアドレス。クライアントは CoTaskMemFree 関数を呼び出して配列を解放する必要があります。 |
| puiCount | DWORD* | out | ppMPEList で返される要素の数を受け取ります。 |
戻り値
このメソッドは HRESULT を返します。返される可能性のある値には、次の表に示すものがあります。
| リターンコード | 説明 |
|---|---|
| メモリが不足しています。 | |
| NULL ポインター引数です。 | |
| テーブルの形式が正しくありません。 | |
| PMT で MPE 情報が見つかりました。 | |
| PMT で MPE 情報が見つかりませんでした。 |
解説(Remarks)
メソッドが成功した場合、前の表に示した 2 つの成功コードのいずれかを返します。PMT に MPE 情報が含まれている場合は MPEG2_S_MPE_INFO_FOUND を返し、PMT に MPE 情報が含まれていない場合は MPEG2_S_MPE_INFO_NOT_FOUND を返します。
RegisterForNextTable メソッドは、current テーブルを置き換える next テーブルが到着したときに通知を受け取るよう、クライアントを登録します。
| hNextTableAvailable | HANDLE | in | 呼び出し元が作成したイベントへのハンドル。next テーブルが到着すると、オブジェクトはこのイベントをシグナル状態にします。イベントがシグナル状態になったら、IPMT::GetNextTable メソッドを呼び出してテーブルを取得します。 |
戻り値
このメソッドは HRESULT を返します。返される可能性のある値には、次の表に示すものがあります。
| リターンコード | 説明 |
|---|---|
| このテーブルは既に next テーブルです。 | |
| 引数が無効です。hNextTableAvailable を NULL にすることはできません。 | |
| メソッドは既に呼び出されています。 | |
| メソッドは成功しました。 |
解説(Remarks)
このメソッドは current テーブルにのみ適用されます。それ以外の場合、メソッドは E_ACCESSDENIED を返します。
GetNextTable メソッドは、current テーブルに続く next テーブルを取得します。
| ppPMT | IPMT** | out | IPMT インターフェースポインターを受け取る変数のアドレス。呼び出し元はインターフェースを解放する必要があります。 |
戻り値
このメソッドは HRESULT を返します。返される可能性のある値には、次の表に示すものがあります。
| リターンコード | 説明 |
|---|---|
| このテーブルは current ではありません。 | |
| 失敗しました。 | |
| NULL ポインター引数です。 | |
| メソッドは成功しました。 |
解説(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 テーブルにのみ適用されます。このメソッドを呼び出す前に、IPMT::RegisterForWhenCurrent を呼び出し、イベントがシグナル状態になるのを待ちます。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IPMT "{01F3B398-9527-4736-94DB-5195878E97A8}" #usecom global IPMT IID_IPMT "{}" #comfunc global IPMT_Initialize 3 sptr,sptr #comfunc global IPMT_GetProgramNumber 4 var #comfunc global IPMT_GetVersionNumber 5 var #comfunc global IPMT_GetPcrPid 6 var #comfunc global IPMT_GetCountOfTableDescriptors 7 var #comfunc global IPMT_GetTableDescriptorByIndex 8 int,sptr #comfunc global IPMT_GetTableDescriptorByTag 9 int,var,sptr #comfunc global IPMT_GetCountOfRecords 10 var #comfunc global IPMT_GetRecordStreamType 11 int,var #comfunc global IPMT_GetRecordElementaryPid 12 int,var #comfunc global IPMT_GetRecordCountOfDescriptors 13 int,var #comfunc global IPMT_GetRecordDescriptorByIndex 14 int,int,sptr #comfunc global IPMT_GetRecordDescriptorByTag 15 int,int,var,sptr #comfunc global IPMT_QueryServiceGatewayInfo 16 var,var #comfunc global IPMT_QueryMPEInfo 17 var,var #comfunc global IPMT_RegisterForNextTable 18 sptr #comfunc global IPMT_GetNextTable 19 sptr #comfunc global IPMT_RegisterForWhenCurrent 20 sptr #comfunc global IPMT_ConvertNextToCurrent 21 ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IPMT "{01F3B398-9527-4736-94DB-5195878E97A8}" #usecom global IPMT IID_IPMT "{}" #comfunc global IPMT_Initialize 3 sptr,sptr #comfunc global IPMT_GetProgramNumber 4 sptr #comfunc global IPMT_GetVersionNumber 5 sptr #comfunc global IPMT_GetPcrPid 6 sptr #comfunc global IPMT_GetCountOfTableDescriptors 7 sptr #comfunc global IPMT_GetTableDescriptorByIndex 8 int,sptr #comfunc global IPMT_GetTableDescriptorByTag 9 int,sptr,sptr #comfunc global IPMT_GetCountOfRecords 10 sptr #comfunc global IPMT_GetRecordStreamType 11 int,sptr #comfunc global IPMT_GetRecordElementaryPid 12 int,sptr #comfunc global IPMT_GetRecordCountOfDescriptors 13 int,sptr #comfunc global IPMT_GetRecordDescriptorByIndex 14 int,int,sptr #comfunc global IPMT_GetRecordDescriptorByTag 15 int,int,sptr,sptr #comfunc global IPMT_QueryServiceGatewayInfo 16 sptr,sptr #comfunc global IPMT_QueryMPEInfo 17 sptr,sptr #comfunc global IPMT_RegisterForNextTable 18 sptr #comfunc global IPMT_GetNextTable 19 sptr #comfunc global IPMT_RegisterForWhenCurrent 20 sptr #comfunc global IPMT_ConvertNextToCurrent 21 ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。