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

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

メソッドは SetPositions 、現在位置と停止位置を設定します。

構文

HRESULT SetPositions(
  [in, out] LONGLONG *pCurrent,
  [in]      DWORD    dwCurrentFlags,
  [in, out] LONGLONG *pStop,
  [in]      DWORD    dwStopFlags
);

パラメーター

[in, out] pCurrent

[入力、出力]現在の位置を現在の時刻形式の単位で指定する変数へのポインター。

[in] dwCurrentFlags

フラグのビットごとの組み合わせ。 「解説」を参照してください。

[in, out] pStop

[入力、出力]現在の時刻形式の単位で停止時刻を指定する変数へのポインター。

[in] dwStopFlags

フラグのビットごとの組み合わせ。 「解説」を参照してください。

戻り値

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

リターン コード 説明
S_FALSE
位置の変更はありません。 (どちらのフラグもシークを指定しません。
S_OK
正常終了しました。
E_INVALIDARG
引数が無効です。
E_NOTIMPL
メソッドはサポートされていません。
E_POINTER
NULL ポインター引数。

注釈

dwCurrentFlags パラメーターと dwStopFlags パラメーターは、シークの種類を定義します。 次のフラグが定義されています。

配置フラグ 説明
AM_SEEKING_NoPositioning 位置の変更はありません。 (time パラメーターには NULL を指定できます)。
AM_SEEKING_AbsolutePositioning 指定した位置は絶対位置です。
AM_SEEKING_RelativePositioning 指定した位置は、前の値に対する相対位置です。
AM_SEEKING_IncrementalPositioning 停止位置 (pStop) は、現在の位置 (pCurrent) を基準にしています。
 
修飾子フラグ 説明
AM_SEEKING_SeekToKeyFrame 最も近いキー フレームをシークします。 これは高速ですが、精度は低い場合があります。 DirectShow に付属するフィルターはいずれも、このフラグをサポートしません。 デコーダーは、それをサポートするフィルターの最も可能性の高い種類です。
AM_SEEKING_ReturnTime 同等の参照時刻を返します。
AM_SEEKING_Segment セグメント シークを使用します。
AM_SEEKING_NoFlush フラッシュしないでください。
 

パラメーターごとに、1 つの配置フラグを使用します。 必要に応じて、1 つ以上の修飾子フラグを含めます。

AM_SEEKING_ReturnTime フラグを指定した場合、メソッドは位置の値を参照時刻に変換し、 pCurrent または pStop 変数で返します。 このフラグは、フレームなどの別の時刻形式を使用している場合に便利です。

AM_SEEKING_SegmentフラグとAM_SEEKING_NoFlush フラグは、シームレス ループをサポートします。

  • AM_SEEKING_Segment フラグが存在する場合、ソース フィルターは IPin::EndOfStream を呼び出すのではなく、停止位置に達したときにEC_END_OF_SEGMENT イベントを送信します。 アプリケーションはこのイベントを待ってから、別の seek コマンドを発行できます。
  • AM_SEEKING_NoFlush フラグが存在する場合、グラフはシーク中にデータをフラッシュしません。 このフラグは、AM_SEEKING_Segmentと共に使用します。
ループを実行するには、グラフで IMediaSeeking::GetCapabilities メソッドのAM_SEEKING_CanDoSegmentsを報告する必要があります。 現時点では、 WAVE パーサー フィルター のみがこの機能をサポートしています。

pCurrentpStop の受信値は、現在の時刻形式で表されます。 既定の時刻形式は REFERENCE_TIME 単位 (100 ナノ秒) です。 時刻の形式を変更するには、 IMediaSeeking::SetTimeFormat メソッドを 使用します。 AM_SEEKING_ReturnTime フラグが存在する場合、メソッドは出力値を REFERENCE_TIME 単位に変換します。

フィルター開発者

このメソッドを実装する場合、呼び出し元が現在の位置または停止位置の変更を要求しているかどうかをチェックするには、AM_SEEKING_PositioningBitsMask値を使用して修飾子フラグをマスクします。 例:
DWORD dwCurrentPos = dwCurrentFlags & AM_SEEKING_PositioningBitsMask
if (dwCurrentPos == AM_SEEKING_AbsolutePositioning)
{ 
    // Set new position to pCurrent.
    m_rtStart = *pCurrent;
}
else if (dwCurrentPos == AM_SEEKING_RelativePositioning)
{
    // Increment current position by pCurrent.
    m_rtStart += *pCurrent;
}
詳細については、基底クラス ライブラリの CSourceSeeking::SetPositions メソッドのソース コードを参照してください。

要件

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

こちらもご覧ください

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

IMediaSeeking インターフェイス