IGetFrame
COM公式ドキュメント
IGetFrame インターフェイスは、開いているストリームから個々のフレームを抽出、展開(デコード)、表示する機能を提供します。
メソッド 4
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
GetFrame メソッドは、ストリームからフレームの展開済みコピーを取得します。アプリケーションが AVIStreamGetFrame 関数を使用したときに呼び出されます。
| lPos | INT | in | コピーして展開するフレーム。 - psストリームへのインターフェイスへのポインター。 |
戻り値
展開されたフレームデータのアドレスを返します。
解説(Remarks)
C++ で記述されたハンドラーの場合、GetFrame の構文は次のとおりです。
LPVOID GetFrame(LONG lPos);
Begin メソッドは、ストリームからフレームのコピーを抽出および展開する準備を行います。アプリケーションが AVIStreamGetFrameOpen 関数を使用したときに呼び出されます。
| lStart | INT | in | 抽出および展開を開始するフレーム。 |
| lEnd | INT | in | 抽出および展開を終了するフレーム。 |
| lRate | INT | in | 通常の再生速度を基準とした、ファイルの読み取り速度。通常の速度は 1000 です。値を大きくすると速度が速くなり、小さくすると遅くなります。 - psストリームへのインターフェイスへのポインター。 |
戻り値
OLE で定義された HRESULT を返します。
解説(Remarks)
C++ で記述されたハンドラーの場合、Begin の構文は次のとおりです。
HRESULT Begin(LONG lStart, LONG lEnd, LONG lRate);
End メソッドは、フレームの抽出と展開を終了します。アプリケーションが AVIStreamGetFrameClose 関数を使用したときに呼び出されます。
戻り値
OLE で定義された HRESULT を返します。
解説(Remarks)
C++ で記述されたハンドラーの場合、Begin の構文は次のとおりです。
HRESULT End(VOID);
SetFormat メソッドは、抽出されるフレームの展開後のイメージ形式を設定します。また、展開処理に使用するバッファーを任意で指定できます。
| lpbi | BITMAPINFOHEADER* | in | 展開後のイメージ形式を定義する BITMAPINFOHEADER 構造体へのポインター。このパラメーターには NULL または値 ((LPBITMAPINFOHEADER) 1) を指定することもできます。NULL を指定すると、デコンプレッサーが編集に適した形式(通常は 24 ビットのイメージ深度形式)を選択します。値 ((LPBITMAPINFOHEADER) 1) を指定すると、デコンプレッサーが現在の表示モードに適した形式を選択します。 |
| lpBits | void* | inoptional | 展開後のイメージデータを格納するバッファーへのポインター。NULL を指定すると、このメソッドがバッファーを割り当てます。 |
| x | INT | in | lpbi で指定された DIB 内の転送先四角形の x 座標。このパラメーターは lpBits が NULL でない場合に使用されます。 |
| y | INT | in | lpbi で指定された DIB 内の転送先四角形の y 座標。このパラメーターは lpBits が NULL でない場合に使用されます。 |
| dx | INT | in | 転送先四角形の幅。このパラメーターは lpBits が NULL でない場合に使用されます。 |
| dy | INT | in | 転送先四角形の高さ。このパラメーターは lpBits が NULL でない場合に使用されます。 - psストリームへのインターフェイスへのポインター。 |
戻り値
成功した場合は NOERROR を返します。展開後のイメージがバッファーサイズより大きい場合は E_OUTOFMEMORY、それ以外の場合は E_FAIL を返します。
解説(Remarks)
x、y、dx、dy の各パラメーターは、lpbi および lpBits で指定されたビットマップのうち、展開後のイメージを受け取る部分を指定します。
C++ で記述されたハンドラーの場合、SetFormat の構文は次のとおりです。
HRESULT SetFormat(LPBITMAPINFOHEADER lpbi, LPVOID lpBits, int x,
int y, int dx, int dy);
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 指定が可能。#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 sptr,sptr,int,int,int,int ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。