ISectionList
COM公式ドキュメント
ISectionList インターフェイスは、MPEG-2 テーブルセクションのリストを表します。
解説(Remarks)
このインターフェイスのインターフェイス識別子 (IID) を宣言するには、__uuidof 演算子を使用します: __uuidof(ISectionList)。
メソッド 7
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
Initialize メソッドはオブジェクトを初期化します。このメソッドは、オブジェクトの作成直後に 1 回だけ呼び出す必要があります。IMpeg2Data::GetSection メソッドおよび IMpeg2Data::GetTable メソッドが内部でこのメソッドを呼び出すため、通常アプリケーションがこれを呼び出すことはありません。
| requestType | MPEG_REQUEST_TYPE | in | リクエストの種類を MPEG_REQUEST_TYPE 値で指定します。 |
| pMpeg2Data | IMpeg2Data* | in | MPEG-2 Sections and Tables フィルターの IMpeg2Data インターフェイスへのポインター。 |
| pContext | MPEG_CONTEXT* | in | MPEG_CONTEXT 構造体へのポインター。この構造体は MPEG-2 ソースを示します。 |
| pid | WORD | in | パケット識別子 (PID) を指定し、トランスポート stream 内のどのパケットを要求するかを示します。 |
| tid | BYTE | in | テーブル識別子 (TID) を指定し、取得するテーブルセクションを示します。 |
| pFilter | MPEG2_FILTER* | in | MPEG2_FILTER 構造体への省略可能なポインター。呼び出し元はこのパラメーターを使用して、追加の MPEG-2 ヘッダーフィールドに基づいてパケットを除外できます。このパラメーターには NULL を指定できます。 |
| timeout | DWORD | in | 同期リクエストがタイムアウトするまでに待機する最大時間を指定します。 |
| hDoneEvent | HANDLE | in | イベントへのハンドルを指定します。リクエストが完了すると、オブジェクトはこのイベントをシグナル状態にします。このパラメーターは省略可能で、非同期リクエストの場合に指定します。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には次の表のものが含まれます。
| 戻り値 | 説明 |
|---|---|
| 引数が無効です。 | |
| メモリが不足しています。 | |
| オブジェクトは既に初期化されています。 | |
| メソッドは成功しました。 |
解説(Remarks)
このメソッドは、requestType パラメーターで定義されたリクエストの種類に応じて、同期または非同期のいずれかで動作します。非同期の場合、メソッドはただちに戻り、hDoneEvent で指定されたイベントをシグナル状態にします。同期の場合、メソッドはリクエストが完了するか、timeout パラメーターで指定されたタイムアウトが経過するまでブロックします。
InitializeWithRawSections メソッドは、生のセクションデータでオブジェクトを初期化します。このメソッドを使用すると、セクションデータのカスタム処理が可能になります。
| pmplSections | MPEG_PACKET_LIST* | in | MPEG-2 セクションのリストを含む MPEG_PACKET_LIST 構造体へのポインター。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には次の表のものが含まれます。
| 戻り値 | 説明 |
|---|---|
| 引数が無効です。 | |
| オブジェクトは既に初期化されています。 | |
| メソッドは成功しました。 |
解説(Remarks)
このメソッドは次のように使用します。
- IMpeg2Data::GetStreamOfSections メソッドを呼び出してセクションデータを取得します。
- 新しい SectionList オブジェクトを作成し、そのセクションデータを指定して InitializeWithRawSections を呼び出します。
CancelPendingRequest メソッドは、保留中の非同期リクエストをキャンセルします。
戻り値
このメソッドは HRESULT を返します。取り得る値には次の表のものが含まれます。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 |
GetNumberOfSections メソッドは、受信した MPEG-2 セクションの数を返します。
| pCount | WORD* | out | セクションの数を受け取ります。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には次の表のものが含まれます。
| 戻り値 | 説明 |
|---|---|
| リクエストはまだ完了していません。 | |
| ポインター引数が NULL です。 | |
| メソッドは成功しました。 |
GetSectionData メソッドは、セクションを取得します。
| sectionNumber | WORD | in | 取得するセクション番号を、0 から始まるインデックスで指定します。セクションの数を取得するには、GetNumberOfSections メソッドを呼び出します。 |
| pdwRawPacketLength | DWORD* | out | セクションデータのサイズをバイト単位で受け取ります。 |
| ppSection | SECTION** | out | セクションデータを含む SECTION 構造体へのポインターを受け取る変数のアドレス。この構造体のメモリは解放しないでください。インターフェイスが解放されるときに、オブジェクトがメモリを解放します。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には次の表のものが含まれます。
| 戻り値 | 説明 |
|---|---|
| リクエストはまだ完了していません。 | |
| ポインター引数が NULL です。 | |
| セクション番号が範囲外です。 | |
| メソッドは成功しました。 |
解説(Remarks)
セクションヘッダーは、ネットワークバイトオーダーからネイティブバイトオーダーに変換されます。変換されるヘッダーのバイト数はヘッダーの種類によって異なります。ヘッダーの種類は、ショートヘッダー (SECTION 構造体)、ロングヘッダー (LONG_SECTION 構造体)、または DSM-CC ヘッダー (DSMCC_SECTION 構造体) です。セクションがショートヘッダーの場合は先頭 3 バイトが、ロングヘッダーの場合は先頭 8 バイトが、DSM-CC ヘッダーの場合は先頭 20 バイトが変換されます。
ヘッダー以降のセクションデータの本体は、解析も変換もされずにそのまま残されます。
GetProgramIdentifier メソッドは、このオブジェクトが受信しているパケットのプログラム識別子 (PID) を取得します。
| pPid | WORD* | in | PID を受け取ります。 |
戻り値
解説(Remarks)
PID 値は、オブジェクトが最初に初期化されるときに設定されます。
GetTableIdentifier メソッドは、このオブジェクトが受信しているパケットのテーブル識別子 (TID) を返します。
| pTableId | BYTE* | in | TID を受け取ります。 |
戻り値
解説(Remarks)
TID 値は、オブジェクトが最初に初期化されるときに設定されます。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_ISectionList "{AFEC1EB5-2A64-46C6-BF4B-AE3CCB6AFDB0}" #usecom global ISectionList IID_ISectionList "{73DA5D04-4347-45D3-A9DC-FAE9DDBE558D}" #comfunc global ISectionList_Initialize 3 int,sptr,var,int,int,var,int,sptr #comfunc global ISectionList_InitializeWithRawSections 4 var #comfunc global ISectionList_CancelPendingRequest 5 #comfunc global ISectionList_GetNumberOfSections 6 var #comfunc global ISectionList_GetSectionData 7 int,var,var #comfunc global ISectionList_GetProgramIdentifier 8 var #comfunc global ISectionList_GetTableIdentifier 9 var ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※#usecom 末尾は CoCreateInstance 用のクラスID(コクラスCLSID, SDKから自動取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_ISectionList "{AFEC1EB5-2A64-46C6-BF4B-AE3CCB6AFDB0}" #usecom global ISectionList IID_ISectionList "{73DA5D04-4347-45D3-A9DC-FAE9DDBE558D}" #comfunc global ISectionList_Initialize 3 int,sptr,sptr,int,int,sptr,int,sptr #comfunc global ISectionList_InitializeWithRawSections 4 sptr #comfunc global ISectionList_CancelPendingRequest 5 #comfunc global ISectionList_GetNumberOfSections 6 sptr #comfunc global ISectionList_GetSectionData 7 int,sptr,sptr #comfunc global ISectionList_GetProgramIdentifier 8 sptr #comfunc global ISectionList_GetTableIdentifier 9 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※#usecom 末尾は CoCreateInstance 用のクラスID(コクラスCLSID, SDKから自動取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。