IMediaSeeking::SetRate メソッド (strmif.h)

[このページに関連付けられている機能 DirectShow は、従来の機能です。 MediaPlayerIMFMediaEngine、および Media Foundation のオーディオ/ビデオ キャプチャに置き換わりました。 これらの機能は、Windows 10とWindows 11用に最適化されています。 新しいコードでは、可能であれば、DirectShow ではなく Media Foundation で MediaPlayerIMFMediaEngineAudio/Video Capture を使用することを強くお勧めします。 Microsoft は、従来の API を使用する既存のコードを、可能であれば新しい API を使用するように書き直すよう提案しています。]

メソッドは SetRate 再生速度を設定します。

構文

HRESULT SetRate(
  [in] double dRate
);

パラメーター

[in] dRate

再生速度。 0 にすることはできません。

戻り値

HRESULT 値を返します。 使用可能な値は次のとおりです。

リターン コード 説明
S_OK
正常終了しました。
E_INVALIDARG
指定されたレートは 0 または負の値でした。 (「解説」を参照してください。)
E_NOTIMPL
実装されていません。
E_POINTER
NULL ポインター引数。
VFW_E_UNSUPPORTED_AUDIO
オーディオ デバイスまたはフィルターでは、このレートはサポートされていません。

注釈

再生速度は、通常の速度の比率で表されます。 したがって、1.0 は通常の再生速度、0.5 は半分の速度、2.0 は 2 倍の速度です。 オーディオ ストリームの場合、レートを変更するとピッチも変わります。

負の値は、逆再生を示します。 ほとんどのフィルターは負の再生をサポートしていませんが、 dRate パラメーターが負の場合はエラー コードを返します。

アプリケーションがフィルター グラフ マネージャーでこのメソッドを呼び出すと、フィルター グラフ マネージャーによって次の処理が行われます。

  1. IMediaSeeking::GetCurrentPosition メソッドを呼び出します。 この呼び出しは、フィルター グラフ マネージャーによって計算された現在の位置を返します。
  2. フィルター グラフを停止します (グラフが一時停止または実行中の場合)。
  3. フィルターで IMediaSeeking::SetPositions メソッドを呼び出し、現在の位置を開始時刻として指定します。 これは、ストリーム時間を 0 にリセットする効果があります。
  4. フィルターの メソッドを SetRate 新しいレートで呼び出します。
  5. フィルター グラフが一時停止または実行中の場合は、フィルター グラフを再開します。
手順 4 でエラーが発生した場合、フィルター グラフ マネージャーは以前のレートの復元を試みます。

フィルターは、レートの変化に次のように応答する必要があります。

パーサーとソース フィルター: タイムスタンプを生成するフィルターは、呼び出しに SetRate 応答します。 これは通常、 AVI スプリッター フィルターなどのパーサー フィルターですが、ソース フィルターである可能性があります。 シークまたはレートが変更された後、フィルターは新しい設定で IPin::NewSegment メソッドを呼び出す必要があります。 レート変更後は、それに応じてタイムスタンプを調整する必要があります。 レート変更の前にシークがあるため、タイムスタンプは 0 から再開されるため、フィルターは単純にレートで除算して新しいタイムスタンプを計算できます。

デコーダー フィルター: デコーダーは、アップストリームに渡す以外の SetRate 呼び出しに対して動作しないでください。 代わりに、アップストリーム パーサーが発行する NewSegment 呼び出しに応答する必要があります。 デコーダー フィルターは、新しいセグメント情報を受信すると、値を格納し、 NewSegment 呼び出しをダウンストリームに渡す必要があります。 一部のデコーダーでは、入力を補間して追加のタイムスタンプを生成する必要があります。この場合、レートの変更を考慮する必要があります。

レンダラー: 受信フレームには正しいタイム スタンプが既に存在するため、ビデオ レンダラーは通常、レートの変更を無視できます。 オーディオ デコーダーは通常、レート変更変換を行わないので、オーディオ レンダラーは再生レートを変更する必要があります。

要件

要件
サポートされている最小のクライアント Windows 2000 Professional [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows 2000 Server [デスクトップ アプリのみ]
対象プラットフォーム Windows
ヘッダー strmif.h (Dshow.h を含む)
Library Strmiids.lib

こちらもご覧ください

エラーコードと成功コード

IMediaSeeking インターフェイス