IMpeg2Stream
COM公式ドキュメント
IMpeg2Stream インターフェイスは MPEG-2 データのストリームを表します。IMpeg2Data::GetStreamOfSections メソッドは、このインターフェイスへのポインターを返します。
解説(Remarks)
このインターフェイスのインターフェイス識別子 (IID) を宣言するには、__uuidof 演算子を使用します: __uuidof(IMpeg2Stream)。
メソッド 2
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
Initialize メソッドは MPEG2Stream オブジェクトを初期化します。このメソッドは、オブジェクトを作成した直後に一度だけ呼び出す必要があります。IMpeg2Data::GetStreamOfSections メソッドが内部でこのメソッドを呼び出すため、通常アプリケーションがこのメソッドを呼び出すことはありません。
| 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 | packet identifier (PID) を指定し、transport stream 内のどのパケットが要求されているかを示します。 |
| tid | BYTE | in | table identifier (TID) を指定し、どのテーブルセクションを取得するかを示します。 |
| pFilter | MPEG2_FILTER* | in | MPEG2_FILTER 構造体への省略可能なポインター。呼び出し側はこのパラメーターを使用して、追加の MPEG-2 ヘッダーフィールドに基づいてパケットを除外できます。このパラメーターは NULL でもかまいません。 |
| hDataReadyEvent | HANDLE | in | イベントへのハンドル。フィルターは、新しいデータを受信するたびにこのイベントをシグナル状態にします。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には次の表に示すものがあります。
| 戻り値 | 説明 |
|---|---|
| 引数のポインターが無効か NULL です。 | |
| メモリが不足しています。 | |
| このオブジェクトに対して、このメソッドは既に呼び出されています。 | |
| メソッドは成功しました。 |
SupplyDataBuffer メソッドは、Mpeg2Stream オブジェクトがデータを書き込むためのバッファーを提供します。
| pStreamBuffer | MPEG_STREAM_BUFFER* | in | 呼び出し側が割り当てた MPEG_STREAM_BUFFER 構造体へのポインター。この構造体には、これも呼び出し側が割り当てたバッファーへのポインターが含まれます。バッファーは少なくとも 4096 バイト必要です。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には次の表に示すものがあります。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| 引数が無効か、パラメーターが NULL です。 | |
| メモリが不足しています。 | |
| 失敗しました。 |
解説(Remarks)
このメソッドを初めて呼び出すと、バッファーにデータをストリーミングするワーカースレッドが開始されます。データが到着すると、MPEG2Stream オブジェクトは IMpeg2Stream::Initialize メソッドに渡されたイベントをシグナル状態にします。(通常、アプリケーションは IMpeg2Data::GetStreamOfSections を呼び出すときにイベントハンドルを指定します。)
イベントがシグナル状態になったら、MPEG_STREAM_BUFFER 構造体の hr フィールドを調べます。この値が成功コードであれば、リクエストは成功し、バッファーには有効なデータが含まれています。さらにデータを取得するには、SupplyDataBuffer メソッドを再度呼び出し、イベントがシグナル状態になるのを待ちます。
セクションヘッダーは、ネットワークバイトオーダーからの変換やその他の処理は行われません。
オブジェクトがまだデータを待機している場合、このメソッドは E_FAIL を返します。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IMpeg2Stream "{400CC286-32A0-4CE4-9041-39571125A635}" #usecom global IMpeg2Stream IID_IMpeg2Stream "{F91D96C7-8509-4D0B-AB26-A0DD10904BB7}" #comfunc global IMpeg2Stream_Initialize 3 int,sptr,var,int,int,var,sptr #comfunc global IMpeg2Stream_SupplyDataBuffer 4 var ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※#usecom 末尾は CoCreateInstance 用のクラスID(コクラスCLSID, SDKから自動取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IMpeg2Stream "{400CC286-32A0-4CE4-9041-39571125A635}" #usecom global IMpeg2Stream IID_IMpeg2Stream "{F91D96C7-8509-4D0B-AB26-A0DD10904BB7}" #comfunc global IMpeg2Stream_Initialize 3 int,sptr,sptr,int,int,sptr,sptr #comfunc global IMpeg2Stream_SupplyDataBuffer 4 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※#usecom 末尾は CoCreateInstance 用のクラスID(コクラスCLSID, SDKから自動取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。