Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
[La fonctionnalité associée à cette page, DirectShow, est une fonctionnalité héritée. Il a été remplacé par MediaPlayer, IMFMediaEngineet audio/vidéo capture dans 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 capture audio/vidéo dans Media Foundation au lieu de directShow, lorsque cela est 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 plupart des méthodes de l’interface IMediaSeeking ont des paramètres qui expriment des valeurs de position, telles que la position actuelle ou la position d’arrêt. Par défaut, ces paramètres sont exprimés en unités de 100 nanosecondes, également appelées temps de référence. Tout filtre pouvant être recherché doit prendre en charge la recherche par heure de référence. Certains filtres peuvent également rechercher à l’aide d’autres unités de temps, telles que la recherche d’un nombre d’images particulier ou la recherche d’un décalage d’octet donné dans un flux. Chacune de ces unités de temps est appelée format de temps et est définie par un identificateur global unique (GUID). Pour obtenir la liste des formats de temps définis par DirectShow, consultez GUID de format de temps. Les tiers peuvent également définir des GUID pour les formats de temps personnalisés.
Pour déterminer si les filtres actuellement dans le graphique de filtre prennent en charge un format de temps particulier, appelez la méthode IMediaSeeking ::IsFormatSupported. La méthode retourne S_OK si le format est pris en charge. Sinon, elle retourne S_FALSE ou un code d’erreur. Si un format est pris en charge, vous pouvez basculer vers ce format en appelant la méthode IMediaSeeking ::SetTimeFormat. Si la méthode SetTimeFormat réussit, les commandes de recherche suivantes sont exprimées à l’aide du nouveau format de temps.
L’exemple suivant vérifie si le graphique prend en charge la recherche par nombre d’images. Si c’est le cas, il cherche à imager le nombre 20 :
hr = pSeek->IsFormatSupported(&TIME_FORMAT_FRAME);
if (hr == S_OK)
{
hr = pSeek->SetTimeFormat(&TIME_FORMAT_FRAME);
if (SUCCEEDED(hr))
{
// Seek to frame number 20.
LONGLONG rtNow = 20;
hr = pSeek->SetPositions(
&rtNow, AM_SEEKING_AbsolutePositioning,
0, AM_SEEKING_NoPositioning);
}
}
Notez que les formats de temps s’appliquent uniquement aux commandes de recherche. Ils n’affectent pas la lecture de graphique ou d’autres actions.