INSSBuffer3
COM公式ドキュメント
INSSBuffer3 インターフェイスは、サンプルの個々のプロパティを設定および取得する機能を追加することで、INSSBuffer インターフェイスを拡張します。
メソッド 2
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
SetProperty メソッドは、バッファ内のサンプルに対してプロパティを指定するために使用します。バッファプロパティは、ASF ファイルの書き込み時に、サンプルとともに情報をライターオブジェクトへ渡すために使用されます。サンプルプロパティは GUID 値です。
| guidBufferProperty | GUID | in | 設定するプロパティを識別する GUID 値です。定義済みのバッファプロパティについては、本ドキュメントの Sample Extension Types セクションで説明しています。独自の GUID 値を使用して、独自のサンプル拡張スキームを定義することもできます。 |
| pvBufferProperty | void* | in | プロパティ値を格納したバッファへのポインターです。 |
| dwBufferPropertySize | DWORD | in | pvBufferProperty が指すバッファのサイズを格納した DWORD 値です。 |
戻り値
このメソッドは HRESULT を返します。指定できる値には、以下の表に示すものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドが成功しました。 | |
| メソッドが新しいプロパティ用のメモリを割り当てられませんでした。 |
解説(Remarks)
IWMStreamConfig2::AddDataUnitExtension の呼び出しで指定したサイズよりも大きいサイズでバッファプロパティを設定しても、SetProperty からはエラーが返されません。ただし、ライターがサンプルを書き込む際に NS_E_DATA_UNIT_EXTENSION_TOO_LARGE が返されます。
GetProperty メソッドは、バッファ内のサンプルのプロパティを取得するために使用します。バッファプロパティは、ASF ファイルの書き込み時に、サンプルとともに情報をライターオブジェクトへ渡すために使用されます。サンプルプロパティは GUID 値です。
| guidBufferProperty | GUID | in | 取得するプロパティを識別する GUID 値です。定義済みのバッファプロパティについては、本ドキュメントの Sample Extension Types セクションで説明しています。独自の GUID 値を使用して、独自のサンプル拡張スキームを定義することもできます。 |
| pvBufferProperty | void* | out | guidBufferProperty で指定されたプロパティの値を受け取るバッファへのポインターです。 |
| pdwBufferPropertySize | DWORD* | inout | pvBufferProperty が指すバッファのサイズを格納した DWORD 値へのポインターです。pvBufferProperty に NULL を渡した場合、メソッドはこのパラメーターが指す値を、プロパティ値を格納するのに必要なサイズに設定します。pvBufferProperty に NULL 以外の値を渡した場合、このパラメーターが指す値は pvBufferProperty が指すバッファのサイズと等しくなければなりません。 |
戻り値
このメソッドは HRESULT を返します。指定できる値には、以下の表に示すものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドが成功しました。 | |
| pdwBufferPropertySize が NULL です。 | |
| guidBufferProperty として指定されたプロパティが、このバッファオブジェクトに設定されていません。 |
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_INSSBuffer3 "{C87CEAAF-75BE-4BC4-84EB-AC2798507672}" #usecom global INSSBuffer3 IID_INSSBuffer3 "{}" #comfunc global INSSBuffer3_SetProperty 10 int,sptr,int #comfunc global INSSBuffer3_GetProperty 11 int,sptr,var ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_INSSBuffer3 "{C87CEAAF-75BE-4BC4-84EB-AC2798507672}" #usecom global INSSBuffer3 IID_INSSBuffer3 "{}" #comfunc global INSSBuffer3_SetProperty 10 int,sptr,int #comfunc global INSSBuffer3_GetProperty 11 int,sptr,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。