IMFRateSupport
COM公式ドキュメント
逆再生を含め、サポートされる再生レートの範囲を照会します。
解説(Remarks)
アプリケーションはこのインターフェイスを使用して、可能な最速および最遅の再生レートを調べたり、指定した再生レートがサポートされているかどうかを照会したりできます。アプリケーションはこのインターフェイスを Media Session から取得します。内部的には、Media Session がパイプライン内のオブジェクトに対して照会を行います。詳細については、How to Determine Supported Rates を参照してください。
現在の再生レートを取得したり、再生レートを変更したりするには、IMFRateControl インターフェイスを使用します。
再生レートは通常の再生レートに対する比率として表されます。逆再生は負のレートとして表されます。再生はthinned(間引き)またはnon-thinned(非間引き)のいずれかです。thinned 再生では、ソースデータの一部(通常はデルタフレーム)がスキップされます。non-thinned 再生では、すべてのソースデータがレンダリングされます。
パイプラインオブジェクト(メディアソース、変換、またはメディアシンク)を作成する場合は、このインターフェイスを実装する必要があるかもしれません。詳細については、Implementing Rate Control を参照してください。
メソッド 3
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
オブジェクトがサポートする最も遅い再生レートを取得します。
| eDirection | MFRATE_DIRECTION | in | 最も遅い順方向再生レートを照会するか、逆方向再生レートを照会するかを指定します。この値は MFRATE_DIRECTION 列挙体のメンバーです。 |
| fThin | BOOL | in | TRUE の場合、メソッドは最も遅い thinned 再生レートを取得します。それ以外の場合、メソッドは最も遅い non-thinned 再生レートを取得します。間引きについては、About Rate Control を参照してください。 |
| pflRate | FLOAT* | out | オブジェクトがサポートする最も遅い再生レートを受け取ります。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には、次の表に示すものが含まれますが、これらに限定されません。
| Return code | Description |
|---|---|
| メソッドは成功しました。 | |
| オブジェクトは逆再生をサポートしていません。 | |
| オブジェクトは間引きをサポートしていません。 |
解説(Remarks)
plfRate に返される値は下限を表します。このレートでの再生が保証されるわけではありません。境界となるレートがサポートされているかどうかを確認するには、IMFRateSupport::IsRateSupported を呼び出してください。たとえば、任意に遅いレートをサポートするコンポーネントは pflRate にゼロを返すため、アプリケーションはコンポーネントがレート 0 をサポートするかどうかを判定するために IsRateSupported を別途呼び出す必要があります。
eDirection が MFRATE_REVERSE の場合、メソッドは最も遅い逆再生レートを取得します。これは、オブジェクトが逆再生をサポートしていることを前提として、負の値になります。
オブジェクトがサポートする最も速い再生レートを取得します。
| eDirection | MFRATE_DIRECTION | in | 最も速い順方向再生レートを照会するか、逆方向再生レートを照会するかを指定します。この値は MFRATE_DIRECTION 列挙体のメンバーです。 |
| fThin | BOOL | in | TRUE の場合、メソッドは最も速い thinned 再生レートを取得します。それ以外の場合、メソッドは最も速い non-thinned 再生レートを取得します。間引きについては、About Rate Control を参照してください。 |
| pflRate | FLOAT* | out | オブジェクトがサポートする最も速い再生レートを受け取ります。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には、次の表に示すものが含まれますが、これらに限定されません。
| Return code | Description |
|---|---|
| メソッドは成功しました。 | |
| オブジェクトは逆再生をサポートしていません。 | |
| オブジェクトは間引きをサポートしていません。 |
解説(Remarks)
一部のフォーマット(ASF など)では、間引きは I フレーム以外のすべてのフレームを破棄することを意味します。コンポーネントがストリームデータを生成する場合(メディアソースやデマルチプレクサーなど)は、fThin パラメーターに注意し、ストリームを間引きできない場合は MF_E_THINNING_UNSUPPORTED を返す必要があります。
コンポーネントがストリームを処理または受信する場合(ほとんどの変換やメディアシンク)、ストリームが間引きされているかどうかを問題にしないのであれば、このパラメーターを無視してもかまいません。Media Session のレートサポート実装では、変換が逆再生を明示的にサポートしていない場合、Media Session は間引きありでの逆再生を試みますが、間引きなしでは試みません。したがって、ほとんどのアプリケーションは、Media Session を逆再生に使用する際に fThin を TRUE に設定します。
eDirection が MFRATE_REVERSE の場合、メソッドは最も速い逆再生レートを取得します。これは、オブジェクトが逆再生をサポートしていることを前提として、負の値になります。
オブジェクトが指定された再生レートをサポートしているかどうかを照会します。
| fThin | BOOL | in | TRUE の場合、メソッドはオブジェクトが間引きありの再生レートをサポートしているかどうかを照会します。それ以外の場合、メソッドはオブジェクトが間引きなしの再生レートをサポートしているかどうかを照会します。間引きについては、About Rate Control を参照してください。 |
| flRate | FLOAT | in | 照会する再生レート。 |
| pflNearestSupportedRate | FLOAT* | inout | オブジェクトが flRate で指定された再生レートをサポートしていない場合、このパラメーターは最も近いサポートされる再生レートを受け取ります。メソッドが S_OK を返す場合、このパラメーターは flRate で指定された値を受け取ります。このパラメーターは NULL にすることができます。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には、次の表に示すものが含まれますが、これらに限定されません。
| Return code | Description |
|---|---|
| オブジェクトは指定されたレートをサポートしています。 | |
| オブジェクトは逆再生をサポートしていません。 | |
| オブジェクトは間引きをサポートしていません。 | |
| オブジェクトは指定されたレートをサポートしていません。 |
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IMFRateSupport "{0A9CCDBC-D797-4563-9667-94EC5D79292D}" #usecom global IMFRateSupport IID_IMFRateSupport "{}" #comfunc global IMFRateSupport_GetSlowestRate 3 int,int,var #comfunc global IMFRateSupport_GetFastestRate 4 int,int,var #comfunc global IMFRateSupport_IsRateSupported 5 int,float,var ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。#define global IID_IMFRateSupport "{0A9CCDBC-D797-4563-9667-94EC5D79292D}" #usecom global IMFRateSupport IID_IMFRateSupport "{}" #comfunc global IMFRateSupport_GetSlowestRate 3 int,int,sptr #comfunc global IMFRateSupport_GetFastestRate 4 int,int,sptr #comfunc global IMFRateSupport_IsRateSupported 5 int,float,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。