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

IMpeg2Stream

COM
IID400cc286-32a0-4ce4-9041-39571125a635継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

IMpeg2Stream インターフェイスは MPEG-2 データのストリームを表します。IMpeg2Data::GetStreamOfSections メソッドは、このインターフェイスへのポインターを返します。

解説(Remarks)

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

メソッド 2

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, HANDLE hDataReadyEvent)

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

requestTypeMPEG_REQUEST_TYPEinリクエストの種類を MPEG_REQUEST_TYPE 値として指定します。
pMpeg2DataIMpeg2Data*inMPEG-2 Sections and Tables フィルターの IMpeg2Data インターフェイスへのポインター。
pContextMPEG_CONTEXT*inMPEG_CONTEXT 構造体へのポインター。この構造体は MPEG-2 ソースを示します。
pidWORDinpacket identifier (PID) を指定し、transport stream 内のどのパケットが要求されているかを示します。
tidBYTEintable identifier (TID) を指定し、どのテーブルセクションを取得するかを示します。
pFilterMPEG2_FILTER*inMPEG2_FILTER 構造体への省略可能なポインター。呼び出し側はこのパラメーターを使用して、追加の MPEG-2 ヘッダーフィールドに基づいてパケットを除外できます。このパラメーターは NULL でもかまいません。
hDataReadyEventHANDLEinイベントへのハンドル。フィルターは、新しいデータを受信するたびにこのイベントをシグナル状態にします。

戻り値

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

戻り値 説明
E_INVALIDARG
引数のポインターが無効か NULL です。
E_OUTOFMEMORY
メモリが不足しています。
MPEG2_E_ALREADY_INITIALIZED
このオブジェクトに対して、このメソッドは既に呼び出されています。
S_OK
メソッドは成功しました。
vtbl 4 HRESULT SupplyDataBuffer(MPEG_STREAM_BUFFER* pStreamBuffer)

SupplyDataBuffer メソッドは、Mpeg2Stream オブジェクトがデータを書き込むためのバッファーを提供します。

pStreamBufferMPEG_STREAM_BUFFER*in呼び出し側が割り当てた MPEG_STREAM_BUFFER 構造体へのポインター。この構造体には、これも呼び出し側が割り当てたバッファーへのポインターが含まれます。バッファーは少なくとも 4096 バイト必要です。

戻り値

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

戻り値 説明
S_OK
メソッドは成功しました。
E_INVALIDARG
引数が無効か、パラメーターが NULL です。
E_OUTOFMEMORY
メモリが不足しています。
E_FAIL
失敗しました。

解説(Remarks)

このメソッドを初めて呼び出すと、バッファーにデータをストリーミングするワーカースレッドが開始されます。データが到着すると、MPEG2Stream オブジェクトは IMpeg2Stream::Initialize メソッドに渡されたイベントをシグナル状態にします。(通常、アプリケーションは IMpeg2Data::GetStreamOfSections を呼び出すときにイベントハンドルを指定します。)

イベントがシグナル状態になったら、MPEG_STREAM_BUFFER 構造体の hr フィールドを調べます。この値が成功コードであれば、リクエストは成功し、バッファーには有効なデータが含まれています。さらにデータを取得するには、SupplyDataBuffer メソッドを再度呼び出し、イベントがシグナル状態になるのを待ちます。

セクションヘッダーは、ネットワークバイトオーダーからの変換やその他の処理は行われません。

オブジェクトがまだデータを待機している場合、このメソッドは E_FAIL を返します。

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