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 |
---|---|
|
Keine Positionsänderung. (Beide Flags geben keine Suche an.) |
|
Erfolg. |
|
Ungültiges Argument. |
|
Die Methode wird nicht unterstützt. |
|
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.
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; } |
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 |