再生割合 (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