IAMVideoCompression
COM公式ドキュメント
IAMVideoCompression インターフェイスは、ビデオ圧縮のプロパティを設定および取得します。
解説(Remarks)
Windows Driver Model (WDM) デバイスの場合、WDM ドライバーが PROPSETID_VIDCAP_VIDEOCOMPRESSION プロパティ セットをサポートしていれば、WDM Video Capture Filter がこのインターフェイスを自動的に公開します。詳細については、Windows Driver Kit (WDK) のドキュメントを参照してください。
メソッド 11
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
put_KeyFrameRate メソッドは、キー フレーム レートを設定します。
| KeyFrameRate | INT | in | 設定するキー フレーム レート。値が負の場合、フィルターは既定のキー フレーム レートを使用します。値が 0 の場合、最初のフレームのみがキー フレームになります。 |
戻り値
HRESULT 値を返します。
解説(Remarks)
フィルターがこのメソッドをサポートしているかどうかを判断するには、IAMVideoCompression::GetInfo メソッドを呼び出し、pCapabilities パラメーターに CompressionCaps_CanKeyFrame フラグが設定されているかどうかを確認します。GetInfo メソッドは既定のキー フレーム レートも返します。
get_KeyFrameRate メソッドは、現在のキー フレーム レートを取得します。
| pKeyFrameRate | INT* | out | 現在のキー フレーム レートを受け取る変数へのポインター。値が負の場合、フィルターは既定のキー フレーム レートを使用します。値が 0 の場合、最初のフレームのみがキー フレームになります。 |
戻り値
HRESULT 値を返します。
解説(Remarks)
キー フレーム レートとは、1 つのキー フレームあたりのフレーム数です。たとえば、レートが 15 の場合、15 フレームごとにキー フレームが発生します。
フィルターがこのメソッドをサポートしているかどうかを判断するには、IAMVideoCompression::GetInfo メソッドを呼び出し、pCapabilities パラメーターに CompressionCaps_CanKeyFrame フラグが設定されているかどうかを確認します。GetInfo メソッドは既定のキー フレーム レートも返します。
put_PFramesPerKeyFrame メソッドは、キー フレームあたりの予測 (P) フレームのレートを設定します。
| PFramesPerKeyFrame | INT | in | キー フレームあたりの P フレーム数を指定します。値が負の場合、フィルターは既定のレートを使用します。 |
戻り値
HRESULT 値を返します。
解説(Remarks)
フィルターがこのメソッドをサポートしているかどうかを判断するには、IAMVideoCompression::GetInfo メソッドを呼び出し、pCapabilities パラメーターに CompressionCaps_CanBFrame フラグが設定されているかどうかを確認します。GetInfo メソッドは既定の P フレーム レートも返します。
get_PFramesPerKeyFrame メソッドは、キー フレームあたりの予測 (P) フレームのレートを取得します。
| pPFramesPerKeyFrame | INT* | out | キー フレームあたりの P フレーム数を受け取る変数へのポインター。値が負の場合、フィルターは既定のレートを使用します。 |
戻り値
HRESULT 値を返します。
解説(Remarks)
フィルターがこのメソッドをサポートしているかどうかを判断するには、IAMVideoCompression::GetInfo メソッドを呼び出し、pCapabilities パラメーターに CompressionCaps_CanBFrame フラグが設定されているかどうかを確認します。GetInfo メソッドは既定の P フレーム レートも返します。
P フレームは MPEG 圧縮で使用されます。一般に、このプロパティは他の圧縮形式には適用されません。たとえば、キー フレームが 10 フレームごとに 1 回発生し、キー フレームあたり 3 つの P フレームがあるとします。この場合、P フレームはキー フレームの間に均等に配置されます。残りの 6 フレームは双方向 (B) フレームになります。
put_Quality メソッドは、圧縮品質を設定します。
| Quality | DOUBLE | in | 品質を 0.0 から 1.0 までの値で指定します。1.0 は最高品質を、0.0 は最低品質を表します。値が負の場合、フィルターは既定の品質を使用します。 |
戻り値
HRESULT 値を返します。
解説(Remarks)
フィルターがこのメソッドをサポートしているかどうかを判断するには、IAMVideoCompression::GetInfo メソッドを呼び出し、pCapabilities パラメーターに CompressionCaps_CanQuality フラグが設定されているかどうかを確認します。GetInfo メソッドは既定の品質も返します。
get_Quality メソッドは、現在の圧縮品質を取得します。
| pQuality | DOUBLE* | out | 相対的な圧縮品質を受け取る変数へのポインター。品質は 0.0 から 1.0 までの値で表され、1.0 は最高品質を、0.0 は最低品質を表します。値が負の場合、フィルターは既定の品質を使用します。 |
戻り値
HRESULT 値を返します。
解説(Remarks)
品質設定の正確な意味はフィルターによって異なります。
フィルターがこのメソッドをサポートしているかどうかを判断するには、IAMVideoCompression::GetInfo メソッドを呼び出し、pCapabilities パラメーターに CompressionCaps_CanQuality フラグが設定されているかどうかを確認します。GetInfo メソッドは既定の品質も返します。
put_WindowSize メソッドは、コンプレッサーが平均データ レートを維持しなければならないフレーム数を設定します。
| WindowSize | ULONGLONG | in | ウィンドウ サイズを、フレーム数で指定します。 |
戻り値
HRESULT 値を返します。
get_WindowSize メソッドは、コンプレッサーが平均データ レートを維持するフレーム数を取得します。
| pWindowSize | ULONGLONG* | out | ウィンドウ サイズをフレーム数で受け取る変数へのポインター。 |
戻り値
HRESULT 値を返します。指定できる値には次のものがあります。
| 戻り値 | 説明 |
|---|---|
| 成功しました。 | |
| 実装されていません。 | |
| NULL ポインター引数です。 |
GetInfo メソッドは、フィルターの圧縮プロパティに関する情報 (機能や既定値を含む) を取得します。
| pszVersion | LPWSTR | outoptional | "Version 2.1.0." のようなバージョン文字列を受け取るバッファーへのポインター。 |
| pcbVersion | INT* | inoutoptional | バージョン文字列のサイズをバイト単位で受け取ります。 |
| pszDescription | LPWSTR | outoptional | "My Video Compressor." のような説明文字列を受け取るバッファーへのポインター。 |
| pcbDescription | INT* | inoutoptional | 説明文字列のサイズをバイト単位で受け取ります。 |
| pDefaultKeyFrameRate | INT* | outoptional | 既定のキー フレーム レートを受け取ります。 |
| pDefaultPFramesPerKey | INT* | outoptional | 既定の、キー フレームあたりの予測 (P) フレームのレートを受け取ります。 |
| pDefaultQuality | DOUBLE* | outoptional | 既定の品質を受け取ります。 |
| pCapabilities | INT* | outoptional | 圧縮機能を、0 個以上の CompressionCaps フラグのビットごとの組み合わせとして受け取ります。 |
戻り値
HRESULT 値を返します。
解説(Remarks)
記載されているパラメーターはいずれも NULL にすることができ、その場合メソッドはそのパラメーターを無視します。
アプリケーションは、バージョン文字列と説明文字列のバッファーを割り当てる必要があります。必要なバッファーのサイズを判断するには、pszVersion パラメーターと pszDescription パラメーターに NULL を指定してこのメソッドを呼び出します。pcbVersion と pcbDescription で返された値を使用してバッファーを割り当て、次のコードのようにメソッドを再度呼び出します。
| C++ |
|---|
|
pCapabilities パラメーターは、どの圧縮プロパティがサポートされているか、ひいてはどの IAMVideoCompression メソッドがサポートされているかを示すフラグのセットを受け取ります。たとえば、CompressionCaps_CanKeyFrame フラグが返された場合、そのフィルターは IAMVideoCompression::get_KeyFrameRate メソッドと IAMVideoCompression::put_KeyFrameRate メソッドをサポートしています。
残りのパラメーターは、圧縮プロパティの既定値を受け取ります。サポートされていないプロパティ (pCapabilities で返されるフラグにより判断) については、対応する既定値が正しくない、または意味を持たない可能性があるため、無視する必要があります。
OverrideKeyFrame メソッドは、特定のフレームをキー フレームとして圧縮するようフィルターに指示します。
| FrameNumber | INT | in | フレーム番号を指定します。フィルターが最初に配信するフレームの番号は 0 です。 |
戻り値
解説(Remarks)
フィルターがこのメソッドをサポートしている場合、これを使用して特定のフレームについて通常のキー フレーム配分を上書きできます。フィルターはキー フレームを作成した後、次のキー フレームをいつ作成すべきかを判断するためにカウントをリセットする場合があります。たとえば、キー フレーム レートが 10 で、アプリケーションがこのメソッドを使用してフレーム 5 をキー フレームとして強制した場合、フィルターは次のキー フレームを作成するまでさらに 10 フレーム (フレーム 15 まで) 待機する可能性があります。
OverrideFrameSize メソッドは、指定されたフレームのフレーム サイズを上書きします。
| FrameNumber | INT | in | フレーム番号を指定します。フィルターが最初に配信するフレームの番号は 0 です。 |
| Size | INT | in | 指定されたフレームの最大サイズをバイト単位で指定します。 |
戻り値
解説(Remarks)
フィルターがこのメソッドをサポートしている場合、IAMVideoCompression::GetInfo メソッドは pCapabilities パラメーターに CompressionCaps_CanCrunch フラグを返します。ただし、このフラグはフィルターがビット レートの設定をサポートしていることを示す場合もあるため、OverrideFrameSize メソッドがサポートされていることを保証するものではありません。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IAMVideoCompression "{C6E13343-30AC-11D0-A18C-00A0C9118956}" #usecom global IAMVideoCompression IID_IAMVideoCompression "{}" #comfunc global IAMVideoCompression_put_KeyFrameRate 3 int #comfunc global IAMVideoCompression_get_KeyFrameRate 4 var #comfunc global IAMVideoCompression_put_PFramesPerKeyFrame 5 int #comfunc global IAMVideoCompression_get_PFramesPerKeyFrame 6 var #comfunc global IAMVideoCompression_put_Quality 7 double #comfunc global IAMVideoCompression_get_Quality 8 var #comfunc global IAMVideoCompression_put_WindowSize 9 int64 #comfunc global IAMVideoCompression_get_WindowSize 10 var #comfunc global IAMVideoCompression_GetInfo 11 var,var,var,var,var,var,var,var #comfunc global IAMVideoCompression_OverrideKeyFrame 12 int #comfunc global IAMVideoCompression_OverrideFrameSize 13 int,int ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。#define global IID_IAMVideoCompression "{C6E13343-30AC-11D0-A18C-00A0C9118956}" #usecom global IAMVideoCompression IID_IAMVideoCompression "{}" #comfunc global IAMVideoCompression_put_KeyFrameRate 3 int #comfunc global IAMVideoCompression_get_KeyFrameRate 4 sptr #comfunc global IAMVideoCompression_put_PFramesPerKeyFrame 5 int #comfunc global IAMVideoCompression_get_PFramesPerKeyFrame 6 sptr #comfunc global IAMVideoCompression_put_Quality 7 double #comfunc global IAMVideoCompression_get_Quality 8 sptr #comfunc global IAMVideoCompression_put_WindowSize 9 int64 #comfunc global IAMVideoCompression_get_WindowSize 10 sptr #comfunc global IAMVideoCompression_GetInfo 11 sptr,sptr,sptr,sptr,sptr,sptr,sptr,sptr #comfunc global IAMVideoCompression_OverrideKeyFrame 12 int #comfunc global IAMVideoCompression_OverrideFrameSize 13 int,int ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。