再生割合 (playback rate) の取得や設定を行えます。
HRESULT SetRate( BOOL fThin, // TRUEならば、Media Streamは間引かれる float flRate // 再生割合 );IMFRateControl::SetRate (mfidl.h) | Microsoft Learn
fThinをTRUEとすることで、ストリームのサンプルの数を減少させられます。これをTRUEとできるかは、IsRateSupported()で確認できます。Thinning - About Rate Control - Win32 apps | Microsoft Learn
flRateを負数とすると、逆方向に再生されます。ゼロとすると、スクラブを示します。
flRateに指定可能な値の範囲は、GetFastestRate()などで確認できます。
再生中にはSetRate()を設定できず、一時停止中には再生方向を変更できません。Remarks - IMFRateControl::SetRate (mfidl.h) | Microsoft Learn
IMFRateControl *pRateControl = NULL;
HRESULT hr = MFGetService(pMediaSession, MF_RATE_CONTROL_SERVICE, IID_PPV_ARGS(&pRateControl));
if (SUCCEEDED(hr))
{
hr = pRateControl->SetRate(FALSE, 2.0f);
}
再生割合に指定可能な値はIMFRateSupportのメソッドから確認できます。
IMFRateSupport *pRateSupport = NULL;
hr = MFGetService(pMediaSession, MF_RATE_CONTROL_SERVICE, IID_PPV_ARGS(&pRateSupport));
if (SUCCEEDED(hr))
{
float rateRequested = 10.0f;
float actualRate = 0.0f;
hr = pRateSupport->IsRateSupported(TRUE, rateRequested, &actualRate);
if (hr == MF_E_UNSUPPORTED_RATE)
{
// 0xC00D36D0:The specified rate is not supported. (指定されたレートはサポートされていません。)
}
else if (hr == MF_E_THINNING_UNSUPPORTED)
{
// 0xC00D36D1 : This component does not support stream-thinning.
}
float slowestRate = 0.0f;
hr = pRateSupport->GetSlowestRate(MFRATE_FORWARD, TRUE, &slowestRate);
float fastestRate = 0.0f;
hr = pRateSupport->GetFastestRate(MFRATE_FORWARD, TRUE, &fastestRate);
}
HRESULT IsRateSupported( BOOL fThin, float flRate, float *pflNearestSupportedRate );IMFRateSupport::IsRateSupported (mfidl.h) | Microsoft Learn
HRESULT GetFastestRate( MFRATE_DIRECTION eDirection, BOOL fThin, float *pflRate );IMFRateSupport::GetFastestRate (mfidl.h) | Microsoft Learn