IMediaSeeking ::SetPositions, méthode (strmif.h)

[La fonctionnalité associée à cette page, DirectShow, est une fonctionnalité héritée. Il a été remplacé par MediaPlayer, IMFMediaEngine et Audio/Video Capture in Media Foundation. Ces fonctionnalités ont été optimisées pour Windows 10 et Windows 11. Microsoft recommande vivement que le nouveau code utilise MediaPlayer, IMFMediaEngine et Audio/Video Capture dans Media Foundation au lieu de DirectShow, si possible. Microsoft suggère que le code existant qui utilise les API héritées soit réécrit pour utiliser les nouvelles API si possible.]

La SetPositions méthode définit la position actuelle et la position d’arrêt.

Syntaxe

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

Paramètres

[in, out] pCurrent

[in,out] Pointeur vers une variable qui spécifie la position actuelle, en unités du format d’heure actuel.

[in] dwCurrentFlags

Combinaison d’indicateurs au niveau du bit. Consultez la section Notes.

[in, out] pStop

[in,out] Pointeur vers une variable qui spécifie l’heure d’arrêt, en unités du format d’heure actuel.

[in] dwStopFlags

Combinaison d’indicateurs au niveau du bit. Consultez la section Notes.

Valeur de retour

Retourne une valeur HRESULT . Les valeurs possibles sont les suivantes.

Code de retour Description
S_FALSE
Aucun changement de position. (Les deux indicateurs ne spécifient aucune recherche.)
S_OK
Réussite.
E_INVALIDARG
Argument non valide.
E_NOTIMPL
La méthode n’est pas prise en charge.
E_POINTER
Argument pointeur NULL .

Remarques

Les paramètres dwCurrentFlags et dwStopFlags définissent le type de recherche. Les indicateurs suivants sont définis.

Indicateurs de positionnement Description
AM_SEEKING_NoPositioning Aucun changement de position. (Le paramètre time peut être NULL.)
AM_SEEKING_AbsolutePositioning La position spécifiée est absolue.
AM_SEEKING_RelativePositioning La position spécifiée est relative à la valeur précédente.
AM_SEEKING_IncrementalPositioning La position d’arrêt (pStop) est relative à la position actuelle (pCurrent).
 
Indicateurs de modification Description
AM_SEEKING_SeekToKeyFrame Recherchez l’image clé la plus proche. Cela peut être plus rapide, mais moins précis. Aucun des filtres fournis avec DirectShow ne prend en charge cet indicateur. Les décodeurs sont le type de filtre le plus probable pour le prendre en charge.
AM_SEEKING_ReturnTime Retourne les heures de référence équivalentes.
AM_SEEKING_Segment Utilisez la recherche de segments.
AM_SEEKING_NoFlush Ne pas vider.
 

Pour chaque paramètre, utilisez un indicateur de positionnement. Si vous le souhaitez, incluez un ou plusieurs indicateurs de modification.

Si l’indicateur AM_SEEKING_ReturnTime est spécifié, la méthode convertit la valeur de position en heure de référence et la retourne dans la variable pCurrent ou pStop . Cet indicateur est utile si vous utilisez un autre format d’heure, tel que des images.

Les indicateurs AM_SEEKING_Segment et AM_SEEKING_NoFlush prennent en charge le bouclage transparent :

  • Si l’indicateur AM_SEEKING_Segment est présent, le filtre source envoie un événement EC_END_OF_SEGMENT lorsqu’il atteint la position d’arrêt, au lieu d’appeler IPin ::EndOfStream. L’application peut attendre cet événement, puis émettre une autre commande de recherche.
  • Si l’indicateur AM_SEEKING_NoFlush est présent, le graphique ne vide pas les données pendant la recherche. Utilisez cet indicateur avec AM_SEEKING_Segment.
Pour effectuer un bouclage, le graphique doit signaler AM_SEEKING_CanDoSegments dans la méthode IMediaSeeking ::GetCapabilities . Actuellement, seul le filtre d’analyseur WAVE prend en charge cette fonctionnalité.

Les valeurs entrantes de pCurrent et pStop sont exprimées au format d’heure actuel. Le format d’heure par défaut est REFERENCE_TIME unités (100 nanosecondes). Pour modifier les formats d’heure, utilisez la méthode IMediaSeeking ::SetTimeFormat . Si l’indicateur AM_SEEKING_ReturnTime est présent, la méthode convertit la valeur sortante en unités REFERENCE_TIME .

Filtrer les développeurs

Si vous implémentez cette méthode, vous pouvez case activée si l’appelant demande une modification de la position actuelle ou de la position d’arrêt, en utilisant la valeur AM_SEEKING_PositioningBitsMask pour masquer les indicateurs de modification. Par exemple :
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;
}
Pour plus d’informations, consultez le code source de la méthode CSourceSeeking ::SetPositions dans la bibliothèque de classes de base.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows 2000 Professionnel [applications de bureau uniquement]
Serveur minimal pris en charge Windows 2000 Server [applications de bureau uniquement]
Plateforme cible Windows
En-tête strmif.h (include Dshow.h)
Bibliothèque Strmiids.lib

Voir aussi

Codes d’erreur et de réussite

IMediaSeeking, interface