CBaseInputPin. Receive, méthode

La Receive méthode reçoit l’échantillon de média suivant dans le flux. Cette méthode implémente la méthode IMemInputPin :: Receive .

Syntaxe

HRESULT Receive(
   IMediaSample *pSample
);

Paramètres

pSample

Pointeur vers l’interface IMediaSample de l’exemple.

Valeur retournée

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

Code de retour Description
_OK
Réussite.
S _ false
Le code PIN est en cours de vidage ; l’exemple a été rejeté.
_pointeur E
Argument de pointeur null .
VFW _ E _ INVALIDMEDIATYPE
Type de média non valide.
_erreur d' _ exécution VFW E _
Une erreur d’exécution s’est produite.
VFW _ E _ état incorrect _
Le code PIN est arrêté.

Remarques

La broche de sortie en amont appelle cette méthode pour remettre un échantillon à la broche d’entrée. La broche d’entrée doit effectuer l’une des opérations suivantes :

  • Traitez l’exemple avant de retourner.
  • Retourner et traiter l’exemple dans un thread de travail.
  • Rejetez l’exemple.

Si le code confidentiel utilise un thread de travail pour traiter l’exemple, ajoutez un décompte de références à l’exemple à l’intérieur de cette méthode. Une fois la méthode retournée, la broche amont libère l’exemple. Lorsque le nombre de références de l’exemple atteint zéro, l’exemple retourne à l’allocateur pour une réutilisation.

Cette méthode est synchrone et peut se bloquer. Si la méthode peut être bloquée, la méthode CBaseInputPin :: ReceiveCanBlock du pin doit retourner s _ OK.

Dans la classe de base, cette méthode effectue les étapes suivantes :

  1. Appelle la méthode CBaseInputPin :: CheckStreaming pour vérifier que le code confidentiel peut traiter des exemples maintenant. Si tel n’est pas le cas, par exemple, si le code PIN est arrêté, la méthode échoue.
  2. Récupère les exemples de propriétés et vérifie si le format a changé (voir ci-dessous).
  3. Si le format a changé, la méthode appelle la méthode CBasePin :: CheckMediaType pour déterminer si le nouveau format est acceptable.
  4. Si le nouveau format n’est pas acceptable, la méthode appelle la méthode CBasePin :: EndOfStream , publie un _ événement EC ERRORABORT et retourne un code d’erreur.
  5. En supposant qu’il n’y avait pas d’erreur, la méthode retourne S _ OK.

Testez une modification de format comme suit :

  • Si l’exemple prend en charge l’interface IMediaSample2 , vérifiez le membre dwSampleFlags de la structure de _ _ Propriétés am SAMPLE2 . Si l' _ indicateur AM Sample _ TYPECHANGED est présent, le format a changé.
  • Sinon, si l’exemple ne prend pas en charge IMediaSample2, appelez la méthode IMediaSample :: GetMediaType . Si la méthode retourne une valeur non null , le format a changé.

Dans la classe de base, cette méthode ne traite pas l’exemple. La classe dérivée doit substituer cette méthode pour effectuer le traitement. (Ce que cela implique dépend entièrement du filtre.) La classe dérivée doit appeler la méthode de classe de base pour rechercher les erreurs décrites précédemment.

Configuration requise

Condition requise Valeur
En-tête
Amfilter. h (inclure Flux. h)
Bibliothèque
Strmbase. lib (versions commerciales);
Strmbasd. lib (versions Debug)

Voir aussi

CBaseInputPin, classe