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

ISectionList

COM
IIDafec1eb5-2a64-46c6-bf4b-ae3ccb6afdb0継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

ISectionList インターフェイスは、MPEG-2 テーブルセクションのリストを表します。

解説(Remarks)

このインターフェイスのインターフェイス識別子 (IID) を宣言するには、__uuidof 演算子を使用します: __uuidof(ISectionList)

メソッド 7

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

vtbl 3 HRESULT Initialize(MPEG_REQUEST_TYPE requestType, IMpeg2Data* pMpeg2Data, MPEG_CONTEXT* pContext, WORD pid, BYTE tid, MPEG2_FILTER* pFilter, DWORD timeout, HANDLE hDoneEvent)

Initialize メソッドはオブジェクトを初期化します。このメソッドは、オブジェクトの作成直後に 1 回だけ呼び出す必要があります。IMpeg2Data::GetSection メソッドおよび IMpeg2Data::GetTable メソッドが内部でこのメソッドを呼び出すため、通常アプリケーションがこれを呼び出すことはありません。

requestTypeMPEG_REQUEST_TYPEinリクエストの種類を MPEG_REQUEST_TYPE 値で指定します。
pMpeg2DataIMpeg2Data*inMPEG-2 Sections and Tables フィルターの IMpeg2Data インターフェイスへのポインター。
pContextMPEG_CONTEXT*inMPEG_CONTEXT 構造体へのポインター。この構造体は MPEG-2 ソースを示します。
pidWORDinパケット識別子 (PID) を指定し、トランスポート stream 内のどのパケットを要求するかを示します。
tidBYTEinテーブル識別子 (TID) を指定し、取得するテーブルセクションを示します。
pFilterMPEG2_FILTER*inMPEG2_FILTER 構造体への省略可能なポインター。呼び出し元はこのパラメーターを使用して、追加の MPEG-2 ヘッダーフィールドに基づいてパケットを除外できます。このパラメーターには NULL を指定できます。
timeoutDWORDin同期リクエストがタイムアウトするまでに待機する最大時間を指定します。
hDoneEventHANDLEinイベントへのハンドルを指定します。リクエストが完了すると、オブジェクトはこのイベントをシグナル状態にします。このパラメーターは省略可能で、非同期リクエストの場合に指定します。

戻り値

このメソッドは HRESULT を返します。取り得る値には次の表のものが含まれます。

戻り値 説明
E_INVALIDARG
引数が無効です。
E_OUTOFMEMORY
メモリが不足しています。
MPEG2_E_ALREADY_INITIALIZED
オブジェクトは既に初期化されています。
S_OK
メソッドは成功しました。

解説(Remarks)

このメソッドは、requestType パラメーターで定義されたリクエストの種類に応じて、同期または非同期のいずれかで動作します。非同期の場合、メソッドはただちに戻り、hDoneEvent で指定されたイベントをシグナル状態にします。同期の場合、メソッドはリクエストが完了するか、timeout パラメーターで指定されたタイムアウトが経過するまでブロックします。

vtbl 4 HRESULT InitializeWithRawSections(MPEG_PACKET_LIST* pmplSections)

InitializeWithRawSections メソッドは、生のセクションデータでオブジェクトを初期化します。このメソッドを使用すると、セクションデータのカスタム処理が可能になります。

pmplSectionsMPEG_PACKET_LIST*inMPEG-2 セクションのリストを含む MPEG_PACKET_LIST 構造体へのポインター。

戻り値

このメソッドは HRESULT を返します。取り得る値には次の表のものが含まれます。

戻り値 説明
E_INVALIDARG
引数が無効です。
MPEG2_E_ALREADY_INITIALIZED
オブジェクトは既に初期化されています。
S_OK
メソッドは成功しました。

解説(Remarks)

このメソッドは次のように使用します。

  1. IMpeg2Data::GetStreamOfSections メソッドを呼び出してセクションデータを取得します。
  2. 新しい SectionList オブジェクトを作成し、そのセクションデータを指定して InitializeWithRawSections を呼び出します。
vtbl 5 HRESULT CancelPendingRequest()

CancelPendingRequest メソッドは、保留中の非同期リクエストをキャンセルします。

戻り値

このメソッドは HRESULT を返します。取り得る値には次の表のものが含まれます。

戻り値 説明
S_OK
メソッドは成功しました。
vtbl 6 HRESULT GetNumberOfSections(WORD* pCount)

GetNumberOfSections メソッドは、受信した MPEG-2 セクションの数を返します。

pCountWORD*outセクションの数を受け取ります。

戻り値

このメソッドは HRESULT を返します。取り得る値には次の表のものが含まれます。

戻り値 説明
E_ACCESSDENIED
リクエストはまだ完了していません。
E_POINTER
ポインター引数が NULL です。
S_OK
メソッドは成功しました。
vtbl 7 HRESULT GetSectionData(WORD sectionNumber, DWORD* pdwRawPacketLength, SECTION** ppSection)

GetSectionData メソッドは、セクションを取得します。

sectionNumberWORDin取得するセクション番号を、0 から始まるインデックスで指定します。セクションの数を取得するには、GetNumberOfSections メソッドを呼び出します。
pdwRawPacketLengthDWORD*outセクションデータのサイズをバイト単位で受け取ります。
ppSectionSECTION**outセクションデータを含む SECTION 構造体へのポインターを受け取る変数のアドレス。この構造体のメモリは解放しないでください。インターフェイスが解放されるときに、オブジェクトがメモリを解放します。

戻り値

このメソッドは HRESULT を返します。取り得る値には次の表のものが含まれます。

戻り値 説明
E_ACCESSDENIED
リクエストはまだ完了していません。
E_POINTER
ポインター引数が NULL です。
MPEG2_E_OUT_OF_BOUNDS
セクション番号が範囲外です。
S_OK
メソッドは成功しました。

解説(Remarks)

セクションヘッダーは、ネットワークバイトオーダーからネイティブバイトオーダーに変換されます。変換されるヘッダーのバイト数はヘッダーの種類によって異なります。ヘッダーの種類は、ショートヘッダー (SECTION 構造体)、ロングヘッダー (LONG_SECTION 構造体)、または DSM-CC ヘッダー (DSMCC_SECTION 構造体) です。セクションがショートヘッダーの場合は先頭 3 バイトが、ロングヘッダーの場合は先頭 8 バイトが、DSM-CC ヘッダーの場合は先頭 20 バイトが変換されます。

ヘッダー以降のセクションデータの本体は、解析も変換もされずにそのまま残されます。

vtbl 8 HRESULT GetProgramIdentifier(WORD* pPid)

GetProgramIdentifier メソッドは、このオブジェクトが受信しているパケットのプログラム識別子 (PID) を取得します。

pPidWORD*inPID を受け取ります。

戻り値

このメソッドは HRESULT を返します。取り得る値には次の表のものが含まれます。

戻り値 説明
E_POINTER
ポインター引数が NULL です。
S_OK
メソッドは成功しました。

解説(Remarks)

PID 値は、オブジェクトが最初に初期化されるときに設定されます。

vtbl 9 HRESULT GetTableIdentifier(BYTE* pTableId)

GetTableIdentifier メソッドは、このオブジェクトが受信しているパケットのテーブル識別子 (TID) を返します。

pTableIdBYTE*inTID を受け取ります。

戻り値

このメソッドは HRESULT を返します。取り得る値には次の表のものが含まれます。

戻り値 説明
E_POINTER
ポインター引数が NULL です。
S_OK
メソッドは成功しました。

解説(Remarks)

TID 値は、オブジェクトが最初に初期化されるときに設定されます。

出典・ライセンス: 上記「公式ドキュメント」の内容は 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_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 指定が可能。