Freigeben über


IMediaSeeking::SetPositions-Methode (strmif.h)

[Das dieser Seite zugeordnete Feature DirectShow ist ein Legacyfeature. Es wurde durch MediaPlayer, IMFMediaEngine und Audio/Video Capture in Media Foundation ersetzt. Diese Features wurden für Windows 10 und Windows 11 optimiert. Microsoft empfiehlt dringend, dass neuer Code nach Möglichkeit MediaPlayer, IMFMediaEngine und Audio/Video Capture in Media Foundation anstelle von DirectShow verwendet. Microsoft schlägt vor, vorhandenen Code, der die Legacy-APIs verwendet, um nach Möglichkeit die neuen APIs zu verwenden.]

Die SetPositions -Methode legt die aktuelle Position und die Stoppposition fest.

Syntax

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

Parameter

[in, out] pCurrent

[ein,aus] Zeiger auf eine Variable, die die aktuelle Position in Einheiten des aktuellen Zeitformats angibt.

[in] dwCurrentFlags

Bitweise Kombination von Flags. Siehe Hinweise.

[in, out] pStop

[ein,aus] Zeiger auf eine Variable, die die Stoppzeit in Einheiten des aktuellen Zeitformats angibt.

[in] dwStopFlags

Bitweise Kombination von Flags. Siehe Hinweise.

Rückgabewert

Gibt einen HRESULT-Wert zurück. Die folgenden Werte sind möglich.

Rückgabecode Beschreibung
S_FALSE
Keine Positionsänderung. (Beide Flags geben keine Suche an.)
S_OK
Erfolg.
E_INVALIDARG
Ungültiges Argument.
E_NOTIMPL
Die Methode wird nicht unterstützt.
E_POINTER
NULL-Zeigerargument.

Hinweise

Die Parameter dwCurrentFlags und dwStopFlags definieren den Suchtyp. Die folgenden Flags werden definiert.

Positionierungsflags BESCHREIBUNG
AM_SEEKING_NoPositioning Keine Änderung der Position. (Der Zeitparameter kann NULL sein.)
AM_SEEKING_AbsolutePositioning Die angegebene Position ist absolut.
AM_SEEKING_RelativePositioning Die angegebene Position ist relativ zum vorherigen Wert.
AM_SEEKING_IncrementalPositioning Die Stoppposition (pStop) ist relativ zur aktuellen Position (pCurrent).
 
Modifiziererflags BESCHREIBUNG
AM_SEEKING_SeekToKeyFrame Suchen Sie zum nächstgelegenen Keyframe. Dies kann schneller, aber weniger genau sein. Keiner der Filter, die im Lieferumfang von DirectShow enthalten sind, unterstützt dieses Flag. Decoder sind der wahrscheinlichste Filtertyp, der ihn unterstützt.
AM_SEEKING_ReturnTime Gibt die entsprechenden Referenzzeiten zurück.
AM_SEEKING_Segment Verwenden Sie die Segmentsuche.
AM_SEEKING_NoFlush Nicht leeren.
 

Verwenden Sie für jeden Parameter ein Positionierungsflag. Optional können Sie ein oder mehrere Modifiziererflags einschließen.

Wenn das flag AM_SEEKING_ReturnTime angegeben wird, konvertiert die Methode den Positionswert in eine Referenzzeit und gibt ihn in der Variablen pCurrent oder pStop zurück. Dieses Flag ist nützlich, wenn Sie ein anderes Zeitformat verwenden, z. B. Frames.

Die flags AM_SEEKING_Segment und AM_SEEKING_NoFlush unterstützen nahtlose Schleifen:

  • Wenn das AM_SEEKING_Segment-Flag vorhanden ist, sendet der Quellfilter ein EC_END_OF_SEGMENT-Ereignis , wenn er die Stoppposition erreicht, anstatt IPin::EndOfStream aufzurufen. Die Anwendung kann auf dieses Ereignis warten und dann einen weiteren Suchbefehl ausgeben.
  • Wenn das AM_SEEKING_NoFlush-Flag vorhanden ist, werden die Daten während der Suche im Diagramm nicht geleert. Verwenden Sie dieses Flag mit AM_SEEKING_Segment.
Zum Ausführen von Schleifen muss das Diagramm AM_SEEKING_CanDoSegments in der IMediaSeeking::GetCapabilities-Methode melden. Derzeit unterstützt nur der WAVE-Parserfilter dieses Feature.

Die eingehenden Werte von pCurrent und pStop werden im aktuellen Zeitformat ausgedrückt. Das Standardzeitformat ist REFERENCE_TIME Einheiten (100 Nanosekunden). Verwenden Sie zum Ändern von Zeitformaten die IMediaSeeking::SetTimeFormat-Methode . Wenn das flag AM_SEEKING_ReturnTime vorhanden ist, konvertiert die Methode den ausgehenden Wert in REFERENCE_TIME Einheiten.

Filterentwickler

Wenn Sie diese Methode implementieren, können Sie überprüfen, ob der Aufrufer eine Änderung der aktuellen oder Stoppposition anfordert, indem Sie den Wert AM_SEEKING_PositioningBitsMask verwenden, um die Modifiziererflags zu maskieren. Beispiel:
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;
}
Weitere Informationen finden Sie im Quellcode für die CSourceSeeking::SetPositions-Methode in der Basisklassenbibliothek.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows 2000 Professional [nur Desktop-Apps]
Unterstützte Mindestversion (Server) Windows 2000 Server [nur Desktop-Apps]
Zielplattform Windows
Kopfzeile strmif.h (include Dshow.h)
Bibliothek Strmiids.lib

Weitere Informationen

Fehler- und Erfolgscodes

IMediaSeeking-Schnittstelle