Win32 API 日本語リファレンス
ホームMedia.Multimedia › IGetFrame

IGetFrame

COM
IID00020023-0000-0000-c000-000000000046継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

IGetFrame インターフェイスは、開いているストリームから個々のフレームを抽出、展開(デコード)、表示する機能を提供します。

メソッド 4

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

vtbl 3 void* GetFrame(INT lPos)

GetFrame メソッドは、ストリームからフレームの展開済みコピーを取得します。アプリケーションが AVIStreamGetFrame 関数を使用したときに呼び出されます。

lPosINTin

コピーして展開するフレーム。

- ps

ストリームへのインターフェイスへのポインター。

戻り値

展開されたフレームデータのアドレスを返します。

解説(Remarks)

C++ で記述されたハンドラーの場合、GetFrame の構文は次のとおりです。


LPVOID GetFrame(LONG lPos); 
 
vtbl 4 HRESULT Begin(INT lStart, INT lEnd, INT lRate)

Begin メソッドは、ストリームからフレームのコピーを抽出および展開する準備を行います。アプリケーションが AVIStreamGetFrameOpen 関数を使用したときに呼び出されます。

lStartINTin抽出および展開を開始するフレーム。
lEndINTin抽出および展開を終了するフレーム。
lRateINTin

通常の再生速度を基準とした、ファイルの読み取り速度。通常の速度は 1000 です。値を大きくすると速度が速くなり、小さくすると遅くなります。

- ps

ストリームへのインターフェイスへのポインター。

戻り値

OLE で定義された HRESULT を返します。

解説(Remarks)

C++ で記述されたハンドラーの場合、Begin の構文は次のとおりです。


HRESULT Begin(LONG lStart, LONG lEnd, LONG lRate); 
 
vtbl 5 HRESULT End()

End メソッドは、フレームの抽出と展開を終了します。アプリケーションが AVIStreamGetFrameClose 関数を使用したときに呼び出されます。

戻り値

OLE で定義された HRESULT を返します。

解説(Remarks)

C++ で記述されたハンドラーの場合、Begin の構文は次のとおりです。


HRESULT End(VOID); 
 
vtbl 6 HRESULT SetFormat(BITMAPINFOHEADER* lpbi, void* lpBits, INT x, INT y, INT dx, INT dy)

SetFormat メソッドは、抽出されるフレームの展開後のイメージ形式を設定します。また、展開処理に使用するバッファーを任意で指定できます。

lpbiBITMAPINFOHEADER*in展開後のイメージ形式を定義する BITMAPINFOHEADER 構造体へのポインター。このパラメーターには NULL または値 ((LPBITMAPINFOHEADER) 1) を指定することもできます。NULL を指定すると、デコンプレッサーが編集に適した形式(通常は 24 ビットのイメージ深度形式)を選択します。値 ((LPBITMAPINFOHEADER) 1) を指定すると、デコンプレッサーが現在の表示モードに適した形式を選択します。
lpBitsvoid*inoptional展開後のイメージデータを格納するバッファーへのポインター。NULL を指定すると、このメソッドがバッファーを割り当てます。
xINTinlpbi で指定された DIB 内の転送先四角形の x 座標。このパラメーターは lpBitsNULL でない場合に使用されます。
yINTinlpbi で指定された DIB 内の転送先四角形の y 座標。このパラメーターは lpBitsNULL でない場合に使用されます。
dxINTin転送先四角形の幅。このパラメーターは lpBitsNULL でない場合に使用されます。
dyINTin

転送先四角形の高さ。このパラメーターは lpBitsNULL でない場合に使用されます。

- ps

ストリームへのインターフェイスへのポインター。

戻り値

成功した場合は NOERROR を返します。展開後のイメージがバッファーサイズより大きい場合は E_OUTOFMEMORY、それ以外の場合は E_FAIL を返します。

解説(Remarks)

xydxdy の各パラメーターは、lpbi および lpBits で指定されたビットマップのうち、展開後のイメージを受け取る部分を指定します。

C++ で記述されたハンドラーの場合、SetFormat の構文は次のとおりです。


HRESULT SetFormat(LPBITMAPINFOHEADER lpbi, LPVOID lpBits, int x, 
    int y, int dx, int dy); 
 
出典・ライセンス: 上記「公式ドキュメント」の内容は 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_IGetFrame "{00020023-0000-0000-C000-000000000046}"
#usecom global IGetFrame IID_IGetFrame "{}"
#comfunc global IGetFrame_GetFrame   3 int
#comfunc global IGetFrame_Begin      4 int,int,int
#comfunc global IGetFrame_End        5
#comfunc global IGetFrame_SetFormat  6 var,sptr,int,int,int,int
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。