Partager via


Méthode IGraphConfig ::Reconnect (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 Reconnect méthode effectue une reconnexion dynamique entre deux broches.

Syntaxe

HRESULT Reconnect(
  [in] IPin                *pOutputPin,
  [in] IPin                *pInputPin,
  [in] const AM_MEDIA_TYPE *pmtFirstConnection,
  [in] IBaseFilter         *pUsingFilter,
  [in] HANDLE              hAbortEvent,
  [in] DWORD               dwFlags
);

Paramètres

[in] pOutputPin

Pointeur vers l’interface IPin d’une broche de sortie. Peut être NULL, auquel cas pInputPin ne doit pas être NULL.

[in] pInputPin

Pointez l’interface IPin vers une broche d’entrée. Peut être NULL, auquel cas pOutputPin ne doit pas être NULL.

[in] pmtFirstConnection

Pointeur vers une structure AM_MEDIA_TYPE qui spécifie le type de média pour la première connexion d’épingle effectuée pendant la reconnexion. Si ce paramètre a la valeur NULL, la première connexion peut avoir n’importe quel type de média.

[in] pUsingFilter

Pointeur vers un filtre facultatif à utiliser dans la reconnexion. Le filtre doit déjà se trouver dans le graphique. Peut être NULL.

[in] hAbortEvent

Handle vers un événement. Si l’appelant est un filtre appelant sur l’un de ses threads de traitement des données, ce paramètre doit être un handle pour un événement qui sera signalé lorsque le filtre sera mis à l’état arrêté. Sinon, ce paramètre peut être NULL. Pour plus d'informations, consultez la section Notes.

[in] dwFlags

Combinaison d’indicateurs de l’énumération AM_GRAPH_CONFIG_RECONNECT_FLAGS , spécifiant comment effectuer la reconnexion.

Valeur retournée

Retourne S_OK en cas de réussite. Sinon, retourne un code d’erreur qui peut être l’une des valeurs suivantes, ou d’autres qui ne sont pas répertoriées.

Code de retour Description
E_INVALIDARG
Argument non valide. (Par exemple, pInputPin et pOutputPin ont la valeur NULL.)
E_NOINTERFACE
La broche d’entrée ne prend pas en charge IPinConnection.
VFW_E_CANNOT_CONNECT
Filtre de connexion impossible.
VFW_E_STATE_CHANGED
L’état du filtre a changé. Impossible de terminer l’opération.

Remarques

Si vous spécifiez une seule broche, la méthode recherche l’autre épingle. Par défaut, toutefois, la recherche échoue si elle atteint un filtre qui a été ajouté au graphique à l’aide de la méthode IFilterGraph ::AddFilter . Pour remplacer ce comportement, appelez IGraphConfig ::SetFilterFlags et définissez l’indicateur AM_FILTER_FLAGS_REMOVABLE sur le filtre.

Le processus de reconnexion implique plusieurs étapes, dont la plupart sont gérées à l’intérieur de cette méthode :

  1. Tout d’abord, avant d’appeler la méthode, veillez à bloquer le flux de données le long du chemin d’accès en cours de reconfiguration. Pour ce faire, les applications doivent appeler la méthode IPinFlowControl ::Block . Si l’appelant est un filtre plutôt qu’une application, il peut éventuellement contrôler le flux de données en interne.
  2. Les broches de sortie et d’entrée spécifiées définissent les points de départ et de fin de la reconnexion. La broche d’entrée doit prendre en charge l’interface IPinConnection . Si vous laissez l’une de ces broches non spécifiée (en passant un paramètre NULL ), la méthode recherche dans le graphique de filtre une broche candidate pour la reconnexion. (Pour trouver une broche d’entrée, il effectue une recherche en aval à partir de la broche de sortie ; pour trouver une broche de sortie, il recherche amont à partir de la broche d’entrée.)
  3. La méthode envoie (push) toutes les données en attente via le graphique de filtre (via un appel interne à IGraphConfig ::P ushThroughData).
  4. Si vous avez spécifié un filtre à insérer dans le graphique, la méthode connecte la broche de sortie de départ à la broche d’entrée du filtre et connecte la broche de sortie du filtre à la broche d’entrée finale. Si vous ne spécifiez pas de filtre, la méthode connecte simplement la broche de sortie à la broche d’entrée. Dans les deux cas, la méthode insère les filtres de transformation requis pour terminer les connexions. (Toutefois, vous pouvez remplacer ce comportement en définissant l’indicateur approprié ; pour plus d’informations, consultez la description du paramètre dwFlags .)
  5. Enfin, la méthode place les nouveaux filtres dans un état d’exécution. Il appartient à l’appelant de redémarrer le flux de données. Pour ce faire, les applications peuvent appeler IPinFlowControl ::Block sans indicateur.
Si un filtre appelle cette méthode sur l’un de ses propres threads de traitement des données, il crée un risque d’interblocage. La méthode obtient un verrou sur le graphique de filtre, ce qui peut empêcher le filtre de s’arrêter lors de la réception d’un appel à IMediaFilter ::Stop. Pour éviter cette situation, la méthode prend un handle à un objet d’événement fourni par le filtre. Le filtre doit signaler l’événement s’il reçoit un appel à sa méthode Stop .

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows XP [applications de bureau uniquement]
Serveur minimal pris en charge Windows Server 2003 [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

IGraphConfig, interface