Win32 API 日本語リファレンス
ホームMedia.DirectShow.Tv › IPMT

IPMT

COM
IID01f3b398-9527-4736-94db-5195878e97a8継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

IPMT インターフェースを使用すると、クライアントは program map table (PMT) から情報を取得できます。

メソッド 19

vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。

vtbl 3 HRESULT Initialize(ISectionList* pSectionList, IMpeg2Data* pMPEGData)

Initialize メソッドは、キャプチャしたテーブルのセクションデータを使用してオブジェクトを初期化します。このメソッドは IAtscPsipParser::GetPMT メソッドによって内部的に呼び出されるため、通常、アプリケーションから呼び出すべきではありません。

pSectionListISectionList*inセクションデータを格納する SectionList オブジェクトの ISectionList インターフェースへのポインター。
pMPEGDataIMpeg2Data*inMPEG-2 Sections and Tables フィルターの IMpeg2Data インターフェースへのポインター。

戻り値

このメソッドは HRESULT を返します。返される可能性のある値には、次の表に示すものがあります。

リターンコード 説明
E_INVALIDARG
引数が無効です。
MPEG2_E_ALREADY_INITIALIZED
オブジェクトは既に初期化されています。
S_OK
メソッドは成功しました。
vtbl 4 HRESULT GetProgramNumber(WORD* pwVal)

GetProgramNumber メソッドは、PMT の program number を返します。

pwValWORD*outprogram_number フィールドを受け取ります。

戻り値

このメソッドは HRESULT を返します。返される可能性のある値には、次の表に示すものがあります。

リターンコード 説明
E_POINTER
NULL ポインター引数です。
S_OK
メソッドは成功しました。
vtbl 5 HRESULT GetVersionNumber(BYTE* pbVal)

GetVersionNumber メソッドは、PMT の version number を返します。

pbValBYTE*outversion_number フィールドを受け取ります。

戻り値

このメソッドは HRESULT を返します。返される可能性のある値には、次の表に示すものがあります。

リターンコード 説明
E_POINTER
NULL ポインター引数です。
S_OK
メソッドは成功しました。
vtbl 6 HRESULT GetPcrPid(WORD* pPidVal)

GetPcrPid メソッドは、このプログラムの Program Clock Reference (PCR) フィールドを含むパケットのパケット識別子 (PID) を返します。

pPidValWORD*outPCR_PID フィールドを受け取ります。

戻り値

このメソッドは HRESULT を返します。返される可能性のある値には、次の表に示すものがあります。

リターンコード 説明
E_POINTER
NULL ポインター引数です。
S_OK
メソッドは成功しました。
vtbl 7 HRESULT GetCountOfTableDescriptors(DWORD* pdwVal)

GetCountOfTableDescriptors メソッドは、PMT 内のテーブル全体の記述子の数を返します。

pdwValDWORD*out記述子の数を受け取ります。

戻り値

このメソッドは HRESULT を返します。返される可能性のある値には、次の表に示すものがあります。

リターンコード 説明
E_POINTER
NULL ポインター引数です。
S_OK
メソッドは成功しました。
vtbl 8 HRESULT GetTableDescriptorByIndex(DWORD dwIndex, IGenericDescriptor** ppDescriptor)

GetTableDescriptorByIndex メソッドは、PMT のテーブル全体の記述子を取得します。

dwIndexDWORDin取得する記述子を 0 から始まるインデックスで指定します。PMT 内のテーブル記述子の数を取得するには、IPMT::GetCountOfTableDescriptors メソッドを呼び出します。
ppDescriptorIGenericDescriptor**outIGenericDescriptor インターフェースポインターを受け取る変数のアドレス。このインターフェースを使用して、記述子内の情報を取得します。呼び出し元はインターフェースを解放する必要があります。

戻り値

このメソッドは HRESULT を返します。返される可能性のある値には、次の表に示すものがあります。

リターンコード 説明
E_POINTER
NULL ポインター引数です。
MPEG2_E_OUT_OF_BOUNDS
インデックスが範囲外です。
S_OK
メソッドは成功しました。
vtbl 9 HRESULT GetTableDescriptorByTag(BYTE bTag, DWORD* pdwCookie, IGenericDescriptor** ppDescriptor)

GetTableDescriptorByTag メソッドは、指定された記述子タグを持つテーブル全体の記述子を PMT 内で検索します。

bTagBYTEin検索する記述子タグを指定します。
pdwCookieDWORD*inout記述子リスト内の検索開始位置を指定する変数へのポインター。このパラメーターは省略可能です。pdwCookie の値が NULL の場合、検索はリスト内の最初の記述子から開始されます。それ以外の場合は、pdwCookie で指定された位置から検索が開始されます。メソッドが復帰するとき、pdwCookie パラメーターには、次に一致する記述子があればその位置が格納されます。このパラメーターを使用して記述子リストを反復処理し、特定の記述子タグのすべての出現箇所を検索できます。
ppDescriptorIGenericDescriptor**outIGenericDescriptor インターフェースポインターを受け取る変数のアドレス。このインターフェースを使用して、記述子内の情報を取得します。呼び出し元はインターフェースを解放する必要があります。

戻り値

このメソッドは HRESULT を返します。返される可能性のある値には、次の表に示すものがあります。

リターンコード 説明
MPEG2_E_OUT_OF_BOUNDS
インデックスが範囲外です。
MPEG2_E_NOT_PRESENT
指定されたタグが見つかりませんでした。
MPEG2_S_MORE_DATA_AVAILABLE
レコードには、このタグを持つ記述子がさらに 1 つ以上含まれています。
MPEG2_S_NO_MORE_DATA_AVAILABLE
レコードには、このタグを持つ記述子はこれ以上含まれていません。
S_OK
メソッドは成功しました。

解説(Remarks)

pdwCookie の値が NULL でない場合、メソッドは MPEG2_S_NO_MORE_DATA_AVAILABLE または MPEG2_S_MORE_DATA_AVAILABLE のいずれかを返し、検索条件に一致する追加のタグが MGT に含まれているかどうかを示します。

vtbl 10 HRESULT GetCountOfRecords(WORD* pwVal)

GetCountOfRecords メソッドは、PMT 内のレコードの数を返します。各レコードは、プログラム内のストリームに対応します。

pwValWORD*outレコードの数を受け取ります。

戻り値

このメソッドは HRESULT を返します。返される可能性のある値には、次の表に示すものがあります。

リターンコード 説明
E_POINTER
NULL ポインター引数です。
S_OK
メソッドは成功しました。
vtbl 11 HRESULT GetRecordStreamType(DWORD dwRecordIndex, BYTE* pbVal)

GetRecordStreamType メソッドは、プログラム内の指定された elementary stream の stream type を返します。

dwRecordIndexDWORDinレコード番号を 0 から始まるインデックスで指定します。PMT 内のレコードの数を取得するには、IPMT::GetCountOfRecords メソッドを呼び出します。
pbValBYTE*outstream_type フィールドを受け取ります。

戻り値

このメソッドは HRESULT を返します。返される可能性のある値には、次の表に示すものがあります。

リターンコード 説明
E_POINTER
NULL ポインター引数です。
MPEG2_E_OUT_OF_BOUNDS
インデックスが範囲外です。
S_OK
メソッドは成功しました。
vtbl 12 HRESULT GetRecordElementaryPid(DWORD dwRecordIndex, WORD* pPidVal)

GetRecordElementaryPid メソッドは、プログラム内の指定された elementary stream のパケット識別子 (PID) を返します。

dwRecordIndexDWORDinレコード番号を 0 から始まるインデックスで指定します。PMT 内のレコードの数を取得するには、IPMT::GetCountOfRecords メソッドを呼び出します。
pPidValWORD*outelementary_PID フィールドを受け取ります。

戻り値

このメソッドは HRESULT を返します。返される可能性のある値には、次の表に示すものがあります。

リターンコード 説明
E_POINTER
NULL ポインター引数です。
MPEG2_E_OUT_OF_BOUNDS
インデックスが範囲外です。
S_OK
メソッドは成功しました。
vtbl 13 HRESULT GetRecordCountOfDescriptors(DWORD dwRecordIndex, DWORD* pdwVal)

GetRecordCountOfDescriptors メソッドは、PMT 内のレコードの記述子の数を返します。

dwRecordIndexDWORDinレコード番号を 0 から始まるインデックスで指定します。PMT 内のレコードの数を取得するには、IPMT::GetCountOfRecords メソッドを呼び出します。
pdwValDWORD*out記述子の数を受け取ります。

戻り値

このメソッドは HRESULT を返します。返される可能性のある値には、次の表に示すものがあります。

リターンコード 説明
E_POINTER
NULL ポインター引数です。
MPEG2_E_OUT_OF_BOUNDS
インデックスが範囲外です。
S_OK
メソッドは成功しました。
vtbl 14 HRESULT GetRecordDescriptorByIndex(DWORD dwRecordIndex, DWORD dwDescIndex, IGenericDescriptor** ppDescriptor)

GetRecordDescriptorByIndex メソッドは、PMT 内の指定されたレコードの記述子を取得します。

dwRecordIndexDWORDinレコード番号を 0 から始まるインデックスで指定します。PMT 内のレコードの数を取得するには、IPMT::GetCountOfRecords メソッドを呼び出します。
dwDescIndexDWORDin取得する記述子を 0 から始まるインデックスで指定します。特定のレコードの記述子の数を取得するには、IPMT::GetRecordCountOfDescriptors メソッドを呼び出します。
ppDescriptorIGenericDescriptor**outIGenericDescriptor インターフェースポインターを受け取る変数のアドレス。このインターフェースを使用して、記述子内の情報を取得します。呼び出し元はインターフェースを解放する必要があります。

戻り値

このメソッドは HRESULT を返します。返される可能性のある値には、次の表に示すものがあります。

リターンコード 説明
E_POINTER
NULL ポインター引数です。
MPEG2_E_OUT_OF_BOUNDS
インデックスが範囲外です。
S_OK
メソッドは成功しました。
vtbl 15 HRESULT GetRecordDescriptorByTag(DWORD dwRecordIndex, BYTE bTag, DWORD* pdwCookie, IGenericDescriptor** ppDescriptor)

GetRecordDescriptorByTag メソッドは、指定された記述子タグを持つ記述子を PMT 内のレコードで検索します。

dwRecordIndexDWORDinレコード番号を 0 から始まるインデックスで指定します。PMT 内のレコードの数を取得するには、IPMT::GetCountOfRecords メソッドを呼び出します。
bTagBYTEin検索する記述子タグを指定します。
pdwCookieDWORD*inout記述子リスト内の検索開始位置を指定する変数へのポインター。このパラメーターは省略可能です。pdwCookie の値が NULL の場合、検索はリスト内の最初の記述子から開始されます。それ以外の場合は、pdwCookie で指定された位置から検索が開始されます。メソッドが復帰するとき、pdwCookie パラメーターには、次に一致する記述子があればその位置が格納されます。このパラメーターを使用して記述子リストを反復処理し、特定の記述子タグのすべての出現箇所を検索できます。
ppDescriptorIGenericDescriptor**outIGenericDescriptor インターフェースポインターを受け取る変数のアドレス。このインターフェースを使用して、記述子内の情報を取得します。呼び出し元はインターフェースを解放する必要があります。

戻り値

このメソッドは HRESULT を返します。返される可能性のある値には、次の表に示すものがあります。

リターンコード 説明
MPEG2_E_OUT_OF_BOUNDS
インデックスが範囲外です。
MPEG2_E_NOT_PRESENT
指定されたタグが見つかりませんでした。
MPEG2_S_MORE_DATA_AVAILABLE
レコードには、このタグを持つ記述子がさらに 1 つ以上含まれています。
MPEG2_S_NO_MORE_DATA_AVAILABLE
レコードには、このタグを持つ記述子はこれ以上含まれていません。
S_OK
メソッドは成功しました。

解説(Remarks)

pdwCookie の値が NULL でない場合、メソッドは MPEG2_S_NO_MORE_DATA_AVAILABLE または MPEG2_S_MORE_DATA_AVAILABLE のいずれかを返し、検索条件に一致する追加のタグがレコードに含まれているかどうかを示します。

vtbl 16 HRESULT QueryServiceGatewayInfo(DSMCC_ELEMENT** ppDSMCCList, DWORD* puiCount)

QueryServiceGatewayInfo メソッドは、PMT 内に DSM-CC service gateway 情報があれば、それを返します。

ppDSMCCListDSMCC_ELEMENT**outDSMCC_ELEMENT 構造体の配列へのポインターを受け取る変数のアドレス。クライアントは CoTaskMemFree 関数を呼び出して配列を解放する必要があります。
puiCountDWORD*outppDSMCCList で返される要素の数を受け取ります。

戻り値

このメソッドは HRESULT を返します。返される可能性のある値には、次の表に示すものがあります。

リターンコード 説明
E_OUTOFMEMORY
メモリが不足しています。
E_POINTER
NULL ポインター引数です。
MPEG2_E_MALFORMED_TABLE
テーブルの形式が正しくありません。
MPEG2_S_SG_INFO_FOUND
PMT で service gateway 情報が見つかりました。
MPEG2_S_SG_INFO_NOT_FOUND
PMT で service gateway 情報が見つかりませんでした。

解説(Remarks)

メソッドが成功した場合、前の表に示した 2 つの成功コードのいずれかを返します。PMT に service gateway 情報が含まれている場合は MPEG2_S_SG_INFO_FOUND を返し、PMT に service gateway 情報が含まれていない場合は MPEG2_S_SG_INFO_NOT_FOUND を返します。

vtbl 17 HRESULT QueryMPEInfo(MPE_ELEMENT** ppMPEList, DWORD* puiCount)

QueryMPEInfo メソッドは、PMT 内に multi-protocol encapsulation (MPE) 情報があれば、それを返します。

ppMPEListMPE_ELEMENT**outMPE_ELEMENT 構造体の配列へのポインターを受け取る変数のアドレス。クライアントは CoTaskMemFree 関数を呼び出して配列を解放する必要があります。
puiCountDWORD*outppMPEList で返される要素の数を受け取ります。

戻り値

このメソッドは HRESULT を返します。返される可能性のある値には、次の表に示すものがあります。

リターンコード 説明
E_OUTOFMEMORY
メモリが不足しています。
E_POINTER
NULL ポインター引数です。
MPEG2_E_MALFORMED_TABLE
テーブルの形式が正しくありません。
MPEG2_S_MPE_INFO_FOUND
PMT で MPE 情報が見つかりました。
MPEG2_S_MPE_INFO_NOT_FOUND
PMT で MPE 情報が見つかりませんでした。

解説(Remarks)

メソッドが成功した場合、前の表に示した 2 つの成功コードのいずれかを返します。PMT に MPE 情報が含まれている場合は MPEG2_S_MPE_INFO_FOUND を返し、PMT に MPE 情報が含まれていない場合は MPEG2_S_MPE_INFO_NOT_FOUND を返します。

vtbl 18 HRESULT RegisterForNextTable(HANDLE hNextTableAvailable)

RegisterForNextTable メソッドは、current テーブルを置き換える next テーブルが到着したときに通知を受け取るよう、クライアントを登録します。

hNextTableAvailableHANDLEin呼び出し元が作成したイベントへのハンドル。next テーブルが到着すると、オブジェクトはこのイベントをシグナル状態にします。イベントがシグナル状態になったら、IPMT::GetNextTable メソッドを呼び出してテーブルを取得します。

戻り値

このメソッドは HRESULT を返します。返される可能性のある値には、次の表に示すものがあります。

リターンコード 説明
E_ACCESSDENIED
このテーブルは既に next テーブルです。
E_INVALIDARG
引数が無効です。hNextTableAvailableNULL にすることはできません。
MPEG2_E_ALREADY_INITIALIZED
メソッドは既に呼び出されています。
S_OK
メソッドは成功しました。

解説(Remarks)

このメソッドは current テーブルにのみ適用されます。それ以外の場合、メソッドは E_ACCESSDENIED を返します。

vtbl 19 HRESULT GetNextTable(IPMT** ppPMT)

GetNextTable メソッドは、current テーブルに続く next テーブルを取得します。

ppPMTIPMT**outIPMT インターフェースポインターを受け取る変数のアドレス。呼び出し元はインターフェースを解放する必要があります。

戻り値

このメソッドは HRESULT を返します。返される可能性のある値には、次の表に示すものがあります。

リターンコード 説明
E_ACCESSDENIED
このテーブルは current ではありません。
E_FAIL
失敗しました。
E_POINTER
NULL ポインター引数です。
S_OK
メソッドは成功しました。

解説(Remarks)

このメソッドは current テーブルにのみ適用されます。それ以外の場合、メソッドは E_ACCESSDENIED を返します。

vtbl 20 HRESULT RegisterForWhenCurrent(HANDLE hNextTableIsCurrent)

RegisterForWhenCurrent メソッドは、テーブルが current になったときに通知を受け取るよう、クライアントを登録します。

hNextTableIsCurrentHANDLEin呼び出し元が作成したイベントへのハンドル。テーブルが current になると、オブジェクトはこのイベントをシグナル状態にします。

戻り値

このメソッドは HRESULT を返します。返される可能性のある値には、次の表に示すものがあります。

リターンコード 説明
E_ACCESSDENIED
このテーブルは既に current テーブルです。
E_INVALIDARG
引数が無効です。hNextTableIsCurrentNULL にすることはできません。
MPEG2_E_ALREADY_INITIALIZED
メソッドは既に呼び出されています。
S_OK
メソッドは成功しました。

解説(Remarks)

このメソッドは next テーブルにのみ適用されます。それ以外の場合、メソッドは E_ACCESSDENIED を返します。

vtbl 21 HRESULT ConvertNextToCurrent()

ConvertNextToCurrent メソッドは、next テーブルを current テーブルに変換します。

戻り値

このメソッドは HRESULT を返します。返される可能性のある値には、次の表に示すものがあります。

リターンコード 説明
E_ACCESSDENIED
このテーブルは既に current です。
E_INVALIDARG
RegisterForWhenCurrent メソッドが呼び出されていません。
MPEG2_E_MALFORMED_TABLE
新しい current テーブルの形式が正しくありません。
S_OK
メソッドは成功しました。

解説(Remarks)

このメソッドは、current になった next テーブルにのみ適用されます。このメソッドを呼び出す前に、IPMT::RegisterForWhenCurrent を呼び出し、イベントがシグナル状態になるのを待ちます。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
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 指定が可能。