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

IAMVideoCompression

COM
IIDc6e13343-30ac-11d0-a18c-00a0c9118956継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

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。

vtbl 3 HRESULT put_KeyFrameRate(INT KeyFrameRate)

put_KeyFrameRate メソッドは、キー フレーム レートを設定します。

KeyFrameRateINTin設定するキー フレーム レート。値が負の場合、フィルターは既定のキー フレーム レートを使用します。値が 0 の場合、最初のフレームのみがキー フレームになります。

戻り値

HRESULT 値を返します。

解説(Remarks)

フィルターがこのメソッドをサポートしているかどうかを判断するには、IAMVideoCompression::GetInfo メソッドを呼び出し、pCapabilities パラメーターに CompressionCaps_CanKeyFrame フラグが設定されているかどうかを確認します。GetInfo メソッドは既定のキー フレーム レートも返します。

vtbl 4 HRESULT get_KeyFrameRate(INT* pKeyFrameRate)

get_KeyFrameRate メソッドは、現在のキー フレーム レートを取得します。

pKeyFrameRateINT*out現在のキー フレーム レートを受け取る変数へのポインター。値が負の場合、フィルターは既定のキー フレーム レートを使用します。値が 0 の場合、最初のフレームのみがキー フレームになります。

戻り値

HRESULT 値を返します。

解説(Remarks)

キー フレーム レートとは、1 つのキー フレームあたりのフレーム数です。たとえば、レートが 15 の場合、15 フレームごとにキー フレームが発生します。

フィルターがこのメソッドをサポートしているかどうかを判断するには、IAMVideoCompression::GetInfo メソッドを呼び出し、pCapabilities パラメーターに CompressionCaps_CanKeyFrame フラグが設定されているかどうかを確認します。GetInfo メソッドは既定のキー フレーム レートも返します。

vtbl 5 HRESULT put_PFramesPerKeyFrame(INT PFramesPerKeyFrame)

put_PFramesPerKeyFrame メソッドは、キー フレームあたりの予測 (P) フレームのレートを設定します。

PFramesPerKeyFrameINTinキー フレームあたりの P フレーム数を指定します。値が負の場合、フィルターは既定のレートを使用します。

戻り値

HRESULT 値を返します。

解説(Remarks)

フィルターがこのメソッドをサポートしているかどうかを判断するには、IAMVideoCompression::GetInfo メソッドを呼び出し、pCapabilities パラメーターに CompressionCaps_CanBFrame フラグが設定されているかどうかを確認します。GetInfo メソッドは既定の P フレーム レートも返します。

vtbl 6 HRESULT get_PFramesPerKeyFrame(INT* pPFramesPerKeyFrame)

get_PFramesPerKeyFrame メソッドは、キー フレームあたりの予測 (P) フレームのレートを取得します。

pPFramesPerKeyFrameINT*outキー フレームあたりの P フレーム数を受け取る変数へのポインター。値が負の場合、フィルターは既定のレートを使用します。

戻り値

HRESULT 値を返します。

解説(Remarks)

フィルターがこのメソッドをサポートしているかどうかを判断するには、IAMVideoCompression::GetInfo メソッドを呼び出し、pCapabilities パラメーターに CompressionCaps_CanBFrame フラグが設定されているかどうかを確認します。GetInfo メソッドは既定の P フレーム レートも返します。

P フレームは MPEG 圧縮で使用されます。一般に、このプロパティは他の圧縮形式には適用されません。たとえば、キー フレームが 10 フレームごとに 1 回発生し、キー フレームあたり 3 つの P フレームがあるとします。この場合、P フレームはキー フレームの間に均等に配置されます。残りの 6 フレームは双方向 (B) フレームになります。

vtbl 7 HRESULT put_Quality(DOUBLE Quality)

put_Quality メソッドは、圧縮品質を設定します。

QualityDOUBLEin品質を 0.0 から 1.0 までの値で指定します。1.0 は最高品質を、0.0 は最低品質を表します。値が負の場合、フィルターは既定の品質を使用します。

戻り値

HRESULT 値を返します。

解説(Remarks)

フィルターがこのメソッドをサポートしているかどうかを判断するには、IAMVideoCompression::GetInfo メソッドを呼び出し、pCapabilities パラメーターに CompressionCaps_CanQuality フラグが設定されているかどうかを確認します。GetInfo メソッドは既定の品質も返します。

vtbl 8 HRESULT get_Quality(DOUBLE* pQuality)

get_Quality メソッドは、現在の圧縮品質を取得します。

pQualityDOUBLE*out相対的な圧縮品質を受け取る変数へのポインター。品質は 0.0 から 1.0 までの値で表され、1.0 は最高品質を、0.0 は最低品質を表します。値が負の場合、フィルターは既定の品質を使用します。

戻り値

HRESULT 値を返します。

解説(Remarks)

品質設定の正確な意味はフィルターによって異なります。

フィルターがこのメソッドをサポートしているかどうかを判断するには、IAMVideoCompression::GetInfo メソッドを呼び出し、pCapabilities パラメーターに CompressionCaps_CanQuality フラグが設定されているかどうかを確認します。GetInfo メソッドは既定の品質も返します。

vtbl 9 HRESULT put_WindowSize(ULONGLONG WindowSize)

put_WindowSize メソッドは、コンプレッサーが平均データ レートを維持しなければならないフレーム数を設定します。

WindowSizeULONGLONGinウィンドウ サイズを、フレーム数で指定します。

戻り値

HRESULT 値を返します。

vtbl 10 HRESULT get_WindowSize(ULONGLONG* pWindowSize)

get_WindowSize メソッドは、コンプレッサーが平均データ レートを維持するフレーム数を取得します。

pWindowSizeULONGLONG*outウィンドウ サイズをフレーム数で受け取る変数へのポインター。

戻り値

HRESULT 値を返します。指定できる値には次のものがあります。

戻り値 説明
S_OK
成功しました。
E_NOTIMPL
実装されていません。
E_POINTER
NULL ポインター引数です。
vtbl 11 HRESULT GetInfo(LPWSTR pszVersion, INT* pcbVersion, LPWSTR pszDescription, INT* pcbDescription, INT* pDefaultKeyFrameRate, INT* pDefaultPFramesPerKey, DOUBLE* pDefaultQuality, INT* pCapabilities)

GetInfo メソッドは、フィルターの圧縮プロパティに関する情報 (機能や既定値を含む) を取得します。

pszVersionLPWSTRoutoptional"Version 2.1.0." のようなバージョン文字列を受け取るバッファーへのポインター。
pcbVersionINT*inoutoptionalバージョン文字列のサイズをバイト単位で受け取ります。
pszDescriptionLPWSTRoutoptional"My Video Compressor." のような説明文字列を受け取るバッファーへのポインター。
pcbDescriptionINT*inoutoptional説明文字列のサイズをバイト単位で受け取ります。
pDefaultKeyFrameRateINT*outoptional既定のキー フレーム レートを受け取ります。
pDefaultPFramesPerKeyINT*outoptional既定の、キー フレームあたりの予測 (P) フレームのレートを受け取ります。
pDefaultQualityDOUBLE*outoptional既定の品質を受け取ります。
pCapabilitiesINT*outoptional圧縮機能を、0 個以上の CompressionCaps フラグのビットごとの組み合わせとして受け取ります。

戻り値

HRESULT 値を返します。

解説(Remarks)

記載されているパラメーターはいずれも NULL にすることができ、その場合メソッドはそのパラメーターを無視します。

アプリケーションは、バージョン文字列と説明文字列のバッファーを割り当てる必要があります。必要なバッファーのサイズを判断するには、pszVersion パラメーターと pszDescription パラメーターに NULL を指定してこのメソッドを呼び出します。pcbVersionpcbDescription で返された値を使用してバッファーを割り当て、次のコードのようにメソッドを再度呼び出します。

C++
// Get the size of the version and description strings, in bytes.
int cbVersion, cbDesc; 
hr = pCompress->GetInfo(NULL, &cbVersion, NULL, &cbDesc, 
    NULL, NULL, NULL, NULL);
if (SUCCEEDED(hr))
{
    // Allocate the buffers.
    WCHAR *pszVersion = new WCHAR[cbVersion / sizeof(WCHAR)];  
    WCHAR *pszDesc = new WCHAR[cbDesc / sizeof(WCHAR)];

    // Now query for the strings.
    hr = pCompress->GetInfo(pszVersion, &cbVersion, pszDesc, &cbDesc, 
        NULL, NULL, NULL, NULL);
    }
    delete [] pszVersion;
    delete [] pszDesc;
}
文字列はワイド文字列であり、返されるサイズは文字数ではなくバイト単位であることに注意してください。また、一方または両方の文字列が長さ 0 になる場合があります。

pCapabilities パラメーターは、どの圧縮プロパティがサポートされているか、ひいてはどの IAMVideoCompression メソッドがサポートされているかを示すフラグのセットを受け取ります。たとえば、CompressionCaps_CanKeyFrame フラグが返された場合、そのフィルターは IAMVideoCompression::get_KeyFrameRate メソッドと IAMVideoCompression::put_KeyFrameRate メソッドをサポートしています。

残りのパラメーターは、圧縮プロパティの既定値を受け取ります。サポートされていないプロパティ (pCapabilities で返されるフラグにより判断) については、対応する既定値が正しくない、または意味を持たない可能性があるため、無視する必要があります。

vtbl 12 HRESULT OverrideKeyFrame(INT FrameNumber)

OverrideKeyFrame メソッドは、特定のフレームをキー フレームとして圧縮するようフィルターに指示します。

FrameNumberINTinフレーム番号を指定します。フィルターが最初に配信するフレームの番号は 0 です。

戻り値

HRESULT 値を返します。指定できる値には次のものがあります。

戻り値 説明
S_OK
成功しました。
E_NOTIMPL
実装されていません。

解説(Remarks)

フィルターがこのメソッドをサポートしている場合、これを使用して特定のフレームについて通常のキー フレーム配分を上書きできます。フィルターはキー フレームを作成した後、次のキー フレームをいつ作成すべきかを判断するためにカウントをリセットする場合があります。たとえば、キー フレーム レートが 10 で、アプリケーションがこのメソッドを使用してフレーム 5 をキー フレームとして強制した場合、フィルターは次のキー フレームを作成するまでさらに 10 フレーム (フレーム 15 まで) 待機する可能性があります。

vtbl 13 HRESULT OverrideFrameSize(INT FrameNumber, INT Size)

OverrideFrameSize メソッドは、指定されたフレームのフレーム サイズを上書きします。

FrameNumberINTinフレーム番号を指定します。フィルターが最初に配信するフレームの番号は 0 です。
SizeINTin指定されたフレームの最大サイズをバイト単位で指定します。

戻り値

HRESULT 値を返します。指定できる値には次のものがあります。

戻り値 説明
S_OK
成功しました。
E_NOTIMPL
実装されていません。

解説(Remarks)

フィルターがこのメソッドをサポートしている場合、IAMVideoCompression::GetInfo メソッドは pCapabilities パラメーターに CompressionCaps_CanCrunch フラグを返します。ただし、このフラグはフィルターがビット レートの設定をサポートしていることを示す場合もあるため、OverrideFrameSize メソッドがサポートされていることを保証するものではありません。

出典・ライセンス: 上記「公式ドキュメント」の内容は 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_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 方式にも切替可。