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

IMFRateSupport

COM
IID0a9ccdbc-d797-4563-9667-94ec5d79292d継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

逆再生を含め、サポートされる再生レートの範囲を照会します。

解説(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。

vtbl 3 HRESULT GetSlowestRate(MFRATE_DIRECTION eDirection, BOOL fThin, FLOAT* pflRate)

オブジェクトがサポートする最も遅い再生レートを取得します。

eDirectionMFRATE_DIRECTIONin最も遅い順方向再生レートを照会するか、逆方向再生レートを照会するかを指定します。この値は MFRATE_DIRECTION 列挙体のメンバーです。
fThinBOOLinTRUE の場合、メソッドは最も遅い thinned 再生レートを取得します。それ以外の場合、メソッドは最も遅い non-thinned 再生レートを取得します。間引きについては、About Rate Control を参照してください。
pflRateFLOAT*outオブジェクトがサポートする最も遅い再生レートを受け取ります。

戻り値

このメソッドは HRESULT を返します。取り得る値には、次の表に示すものが含まれますが、これらに限定されません。

Return code Description
S_OK
メソッドは成功しました。
MF_E_REVERSE_UNSUPPORTED
オブジェクトは逆再生をサポートしていません。
MF_E_THINNING_UNSUPPORTED
オブジェクトは間引きをサポートしていません。

解説(Remarks)

plfRate に返される値は下限を表します。このレートでの再生が保証されるわけではありません。境界となるレートがサポートされているかどうかを確認するには、IMFRateSupport::IsRateSupported を呼び出してください。たとえば、任意に遅いレートをサポートするコンポーネントは pflRate にゼロを返すため、アプリケーションはコンポーネントがレート 0 をサポートするかどうかを判定するために IsRateSupported を別途呼び出す必要があります。

eDirectionMFRATE_REVERSE の場合、メソッドは最も遅い逆再生レートを取得します。これは、オブジェクトが逆再生をサポートしていることを前提として、負の値になります。

vtbl 4 HRESULT GetFastestRate(MFRATE_DIRECTION eDirection, BOOL fThin, FLOAT* pflRate)

オブジェクトがサポートする最も速い再生レートを取得します。

eDirectionMFRATE_DIRECTIONin最も速い順方向再生レートを照会するか、逆方向再生レートを照会するかを指定します。この値は MFRATE_DIRECTION 列挙体のメンバーです。
fThinBOOLinTRUE の場合、メソッドは最も速い thinned 再生レートを取得します。それ以外の場合、メソッドは最も速い non-thinned 再生レートを取得します。間引きについては、About Rate Control を参照してください。
pflRateFLOAT*outオブジェクトがサポートする最も速い再生レートを受け取ります。

戻り値

このメソッドは HRESULT を返します。取り得る値には、次の表に示すものが含まれますが、これらに限定されません。

Return code Description
S_OK
メソッドは成功しました。
MF_E_REVERSE_UNSUPPORTED
オブジェクトは逆再生をサポートしていません。
MF_E_THINNING_UNSUPPORTED
オブジェクトは間引きをサポートしていません。

解説(Remarks)

一部のフォーマット(ASF など)では、間引きは I フレーム以外のすべてのフレームを破棄することを意味します。コンポーネントがストリームデータを生成する場合(メディアソースやデマルチプレクサーなど)は、fThin パラメーターに注意し、ストリームを間引きできない場合は MF_E_THINNING_UNSUPPORTED を返す必要があります。

コンポーネントがストリームを処理または受信する場合(ほとんどの変換やメディアシンク)、ストリームが間引きされているかどうかを問題にしないのであれば、このパラメーターを無視してもかまいません。Media Session のレートサポート実装では、変換が逆再生を明示的にサポートしていない場合、Media Session は間引きありでの逆再生を試みますが、間引きなしでは試みません。したがって、ほとんどのアプリケーションは、Media Session を逆再生に使用する際に fThinTRUE に設定します。

eDirectionMFRATE_REVERSE の場合、メソッドは最も速い逆再生レートを取得します。これは、オブジェクトが逆再生をサポートしていることを前提として、負の値になります。

vtbl 5 HRESULT IsRateSupported(BOOL fThin, FLOAT flRate, FLOAT* pflNearestSupportedRate)

オブジェクトが指定された再生レートをサポートしているかどうかを照会します。

fThinBOOLinTRUE の場合、メソッドはオブジェクトが間引きありの再生レートをサポートしているかどうかを照会します。それ以外の場合、メソッドはオブジェクトが間引きなしの再生レートをサポートしているかどうかを照会します。間引きについては、About Rate Control を参照してください。
flRateFLOATin照会する再生レート。
pflNearestSupportedRateFLOAT*inoutオブジェクトが flRate で指定された再生レートをサポートしていない場合、このパラメーターは最も近いサポートされる再生レートを受け取ります。メソッドが S_OK を返す場合、このパラメーターは flRate で指定された値を受け取ります。このパラメーターは NULL にすることができます。

戻り値

このメソッドは HRESULT を返します。取り得る値には、次の表に示すものが含まれますが、これらに限定されません。

Return code Description
S_OK
オブジェクトは指定されたレートをサポートしています。
MF_E_REVERSE_UNSUPPORTED
オブジェクトは逆再生をサポートしていません。
MF_E_THINNING_UNSUPPORTED
オブジェクトは間引きをサポートしていません。
MF_E_UNSUPPORTED_RATE
オブジェクトは指定されたレートをサポートしていません。
出典・ライセンス: 上記「公式ドキュメント」の内容は 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_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 方式にも切替可。