Microsoft DirectX 8.0 |
IAMVideoCompression ピン インターフェイスを使用すると、メディア タイプに含まれていない圧縮パラメータを制御できる。
put_PFramesPerKeyFrame メソッドおよび get_PFramesPerKeyFrame メソッドは、予測 (P) フレームおよび両方向予測 (B) フレームを参照する。これは、MPEG の概念で、一般に MPEG より単純なタイプのコンプレッサには該当しない。
このインターフェイスを、圧縮済みビデオ データを提供するビデオ キャプチャまたはビデオ コンプレッサ フィルタの出力ピンで実装する。
アプリケーションは、このインターフェイスを使用して、キー フレームの数、フレーム品質などの特性を含めて、ビデオの圧縮方法を制御する。また、コンプレッサのテキスト説明、およびコンプレッサの機能などのその他の入手可能な情報の取得に使用する。
注 : このインターフェイスは、キャプチャ フィルタの出力ピンがグラフ内の別のフィルタに接続していない場合、使用できないことがある。
vtable 順のメソッド
IUnknown メソッド 説明 QueryInterface サポートされているインターフェイスへのポインタを取得する。 AddRef 参照カウントをインクリメントする。 Release 参照カウントをデクリメントする。 IAMVideoCompression methods 説明 put_KeyFrameRate キー フレーム レートを設定する。 get_KeyFrameRate キー フレーム レートを取得する。 put_PFramesPerKeyFrame 予測 (P) フレームの間隔を設定する。 get_PFramesPerKeyFrame P フレームの間隔を取得する。 put_Quality ビデオ イメージ圧縮の品質を設定する。 get_Quality 現在のイメージ品質の設定を取得する。 put_WindowSize コンプレッサが維持しなければならない平均データ レートの基準となるフレーム数を設定する。 get_WindowSize コンプレッサが維持しなければならない平均データ レートの基準となるフレーム数を取得する。 GetInfo コンプレッサの情報を取得する。 OverrideKeyFrame 特定のフレームをキー フレームにする。 OverrideFrameSize 特定のフレームのデータ レートを無効にする。
コンプレッサの情報を取得する。
構文
HRESULT GetInfo( WCHAR *pszVersion, int *pcbVersion, LPWSTR pszDescription, int *pcbDescription, long *pDefaultKeyFrameRate, long *pDefaultPFramesPerKey, double *pDefaultQuality, long *pCapabilities ) PURE;
パラメータ
- pszVersion
- [out] "Version 2.1.0" などのバージョン文字列へのポインタ。
- pcbVersion
- [in, out] バージョン文字列に必要なサイズ。文字数ではなく Unicode 文字列でのバイト数へのポインタ。したがって、その文字列が保持できる文字数の 2 倍でなければならない。現在のサイズを取得する場合は、このパラメータに NULL を設定して呼び出す。
- pszDescription
- [out] "Awesome Video Compressor" などの説明文字列へのポインタ。
- pcbDescription
- [in, out] 説明文字列に必要なサイズ。文字数ではなく Unicode 文字列でのバイト数へのポインタ。したがって、その文字列が保持できる文字数の 2 倍でなければならない。現在のサイズを取得する場合は、このパラメータに NULL を設定して呼び出す。
- pDefaultKeyFrameRate
- [out] デフォルトのキー フレーム レートを受け取るためのポインタ。
- pDefaultPFramesPerKey
- [out] キー フレームごとのデフォルトの予測 (P) フレーム数を受け取るためのポインタ。
- pDefaultQuality
- [out] デフォルトの品質を受け取るためのポインタ。
- pCapabilities
- [out] 圧縮機能の情報を受け取るためのポインタ。この圧縮機能の情報は、CompressionCaps 列挙型フラグの組み合わせである。
戻り値
インターフェイスの実装に応じた HRESULT 値を返す。
現在のキー フレーム レートを取得する。
構文
get_KeyFrameRate( long *pKeyFrameRate ) PURE;
パラメータ
- pKeyFrameRate
- [out] コンプレッサの現在のキー フレーム レートへのポインタ。負の値は、コンプレッサがビデオ コンプレッサのデフォルトのフレーム レートを使用していることを示す。ゼロ値は、最初のフレームだけがキー フレームであることを示す。
戻り値
インターフェイスの実装に応じた HRESULT 値を返す。
注意
コンプレッサがこのメソッドをサポートしているかどうかを確認するには、IAMVideoCompression::GetInfo メソッドの pCapabilities パラメータに返される CompressionCaps_CanKeyFrame フラグを調べる。
参照
予測 (P) フレームの間隔を取得する。
構文
HRESULT get_PFramesPerKeyFrame( long *pPFramesPerKeyFrame ) PURE;
パラメータ
- pPFramesPerKeyFrame
- [out] キー フレームごとの P フレームの数を受け取るためのポインタ。負の値は、コンプレッサがデフォルト値を使用することを示す。
戻り値
インターフェイスの実装に応じた HRESULT 値を返す。Video for Windows のキャプチャ フィルタ (VFW キャプチャ) および AVI 圧縮フィルタ (AVI コンプレッサ) では、現在このインターフェイスがサポートされていないので、E_NOTIMPL が返される。
注意
コンプレッサがこのメソッドをサポートしているかどうかを確認するには、IAMVideoCompression::GetInfo メソッドの pCapabilities パラメータに返される CompressionCaps_CanBFrame フラグを調べる。
各フレーム タイプの間の関係の例として、10 フレームごとにキー フレームが一度発生し、キー フレームごとに 3 個の P フレームがある場合を想定する。これらの P フレームはキー フレーム間で等間隔に発生する。キー フレームと P フレームの間にあるほかの 6 個のフレームは両方向予測 (B) フレームである。
参照
現在のイメージ品質の設定を取得する。
構文
HRESULT get_Quality( double *pQuality ) PURE;
パラメータ
- pQuality
- [out] 現在の品質の設定へのポインタ。
戻り値
インターフェイスの実装に応じた HRESULT 値を返す。
注意
品質は、0 から 1 の範囲の値である。1 は最高品質を示し、0 は最低品質を示す。負の値は、コンプレッサのデフォルトが使用されていることを示す。この値はコンプレッサによって解釈する。その解釈はコンプレッサごとに異なる。コンプレッサが特定のデータ レートで圧縮しているのではない場合、この値によってイメージ サイズまたは品質が大まかに決定される。
コンプレッサがこのメソッドをサポートしているかどうかを確認するには、IAMVideoCompression::GetInfo メソッドの pCapabilities パラメータに返される CompressionCaps_CanQuality フラグを調べる。
固定データ レートで圧縮している場合、品質値が高いと、全データ レートが使用されることを意味する。品質値が低いと、そのデータ レートよりもかなり低いデータ レートを使用できることを意味する。
コンプレッサが維持しなければならない平均データ レートの基準となるフレーム数を取得する。
構文
HRESULT get_WindowSize( DWORDLONG *pWindowSize );
パラメータ
- pWindowSize
- [out] ウィンドウ サイズを受け取る DWORDLONG 値へのポインタ。
戻り値
インターフェイスの実装に応じた HRESULT 値を返す。
参照
フレームのデータ レートを無効にする。
構文
HRESULT OverrideFrameSize( long FrameNumber, long Size ) PURE;
パラメータ
- FrameNumber
- [in] サイズを変更するフレームの番号。
- Size
- [in] 指定したフレームに対する変更後のサイズ (バイト単位)。
戻り値
インターフェイスの実装に応じた HRESULT 値を返す。Video for Windows のキャプチャ フィルタ (VFW キャプチャ) および AVI 圧縮フィルタ (AVI コンプレッサ) では、現在このインターフェイスがサポートされていないので、E_NOTIMPL が返される。
注意
コンプレッサがこのメソッドをサポートしているかどうかを確認するには、IAMVideoCompression::GetInfo メソッドの pCapabilities パラメータに返される CompressionCaps_CanCrunch フラグを調べる。このフラグは、dwBitRate 値を AM_MEDIA_TYPE の VIDEOINFOHEADER 構造体で設定できることを示すために設定される場合もある。
フレーム番号は、ストリーミング後にフィルタから出力されるフレームを指す。たとえば、フレーム 0 は、このピンが配信する 1 番目のフレームを示す。フレーム 11 はピンが配信する 12 番目のフレームを示す。このメソッドは、サイズ変更対象のフレームがフィルタによって配信される前に呼び出すようにする。
フレーム サイズを無効にする (フレーム "クランチング") と、本来予定されていたサイズではなくこのメソッドで指定されたバイトまたはそれ以下にするようにフィルタに指示される。
フレームをキー フレームにする。
構文
HRESULT OverrideKeyFrame( long FrameNumber ) PURE;
パラメータ
- FrameNumber
- [in] 通常はキー フレームでない場合でも、グラフの実行時にキー フレームにされるフレームの番号。
戻り値
インターフェイスの実装に応じた HRESULT 値を返す。Video for Windows のキャプチャ フィルタ (VFW キャプチャ) および AVI 圧縮フィルタ (AVI コンプレッサ) では、現在このインターフェイスがサポートされていないので、E_NOTIMPL が返される。
注意
コンプレッサは、キー フレームを作成した後にそのカウントをリセットして、次にキー フレームが発生する場所を決定できる。たとえば、通常キー フレームが 10 フレームおきに発生するとする。OverrideKeyFrame を使用してフレーム 5 をキー フレームとして設定すると、コンプレッサは次のキー フレームを作成するまでもう 10 フレーム待つことができる。
キー フレーム レートを設定する。
構文
HRESULT put_KeyFrameRate( long KeyFrameRate ) PURE;
パラメータ
- KeyFrameRate
- [in] 設定するキー フレーム レート。負の値はビデオ コンプレッサがデフォルトのフレーム レートを使用することを示す。ゼロ値は最初のフレームだけがキー フレームであることを示す。
戻り値
インターフェイスの実装に応じた HRESULT 値を返す。
注意
コンプレッサがこのメソッドをサポートしているかどうかを確認するには、IAMVideoCompression::GetInfo メソッドの pCapabilities パラメータに返される CompressionCaps_CanKeyFrame フラグを調べる。
予測 (P) フレームの間隔を設定する。
構文
HRESULT put_PFramesPerKeyFrame( long PFramesPerKeyFrame ) PURE;
パラメータ
- PFramesPerKeyFrame
- [in] 設定する P フレームの間隔。負の値はビデオ コンプレッサがデフォルトのフレーム レートを使用することを示す。
戻り値
インターフェイスの実装に応じた HRESULT 値を返す。 Video for Windows のキャプチャ フィルタ (VFW キャプチャ) および AVI 圧縮フィルタ (AVI コンプレッサ) では、現在このインターフェイスがサポートされていないので、E_NOTIMPL が返される。
注意
コンプレッサがこのメソッドをサポートしているかどうかを確認するには、IAMVideoCompression::GetInfo メソッドの pCapabilities パラメータに返される CompressionCaps_CanBFrame フラグを調べる。
各フレーム タイプの間の関係の例として、10 フレームごとにキー フレームが一度発生し、キー フレームごとに 3 個の P フレームがある場合を想定する。これらの P フレームはキー フレーム間で等間隔に発生する。キー フレームと P フレームの間にあるほかの 6 個のフレームは両方向予測 (B) フレームである。
ビデオ イメージの品質を設定する。
構文
HRESULT put_Quality( double Quality ) PURE;
パラメータ
- Quality
- [in] 設定する品質。
戻り値
インターフェイスの実装に応じた HRESULT 値を返す。
注意
品質は 0 と 1 を含む 0 〜 1 の範囲の値である。1 は最高品質を示し、0 は最低品質を示す。負の値は、コンプレッサのデフォルトが使用されることを示す。この値はコンプレッサ (CODEC) によって解釈される。その解釈は CODEC ごとに異なる。コンプレッサが特定のデータ レートで圧縮しているのではない場合、この値によってイメージ サイズまたは品質が大まかに決定される。
コンプレッサがこのメソッドをサポートしているかどうかを確認するには、IAMVideoCompression::GetInfo メソッドの pCapabilities パラメータに返される CompressionCaps_CanQuality フラグを調べる。
固定データ レートで圧縮している場合、品質値が高いと、全データ レートが使用されることを意味する。品質値が低いと、そのデータ レートよりもかなり低いデータ レートを使用できることを意味する。
コンプレッサが維持しなければならない平均データ レートの基準となるフレーム数を設定する。
構文
HRESULT put_WindowSize( DWORDLONG WindowSize );
パラメータ
- WindowSize
- [in] ウィンドウのサイズ (フレーム数)。その平均サイズは、コンプレッサが提供するように求められているデータ レートを超えることはできない。
戻り値
インターフェイスの実装に応じた HRESULT 値を返す。
注意
サイズ n のウィンドウの場合、連続した n 個のフレームの平均フレーム サイズは、そのストリームの指定されたデータ レートを超えない。ただし、それぞれのフレームはそれよりも大きくても小さくてもかまわない。たとえば、毎秒 10 フレーム (fps) のムービーに対して毎秒 100 キロバイト (KB) のデータ レートを設定した場合、通常は、各フレームが 10 KB 以下でなければならないことを意味する。しかし、ウィンドウ サイズに n を設定することで、これら n 個のフレームの平均の長さが 10 KB 以下である限り、それぞれのフレームの大きさは問題ではないことを指定することになる。たとえば、フレームが 10 KB より小さくても、10 KB よりも大きくても、平均が 10 KB 以下であればかまわない。
参照