IMediaSeeking::SetPositions メソッド (strmif.h)
[このページに関連付けられている機能 DirectShow は、従来の機能です。 MediaPlayer、IMFMediaEngine、および Media Foundation のオーディオ/ビデオ キャプチャに置き換わりました。 これらの機能は、Windows 10とWindows 11用に最適化されています。 新しいコードでは、可能であれば、DirectShow ではなく Media Foundation で MediaPlayer、IMFMediaEngine、Audio/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 値を返します。 使用可能な値は次のとおりです。
リターン コード | 説明 |
---|---|
|
位置の変更はありません。 (どちらのフラグもシークを指定しません。 |
|
正常終了しました。 |
|
引数が無効です。 |
|
メソッドはサポートされていません。 |
|
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と共に使用します。
pCurrent と pStop の受信値は、現在の時刻形式で表されます。 既定の時刻形式は 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; } |
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows 2000 Professional [デスクトップ アプリのみ] |
サポートされている最小のサーバー | Windows 2000 Server [デスクトップ アプリのみ] |
対象プラットフォーム | Windows |
ヘッダー | strmif.h (Dshow.h を含む) |
Library | Strmiids.lib |