Méthode CBaseStreamControl. CheckStreamState
La CheckStreamState méthode détermine si un échantillon de média doit être remis ou ignoré.
Syntaxe
enum CheckStreamState(
IMediaSample *pSample
);
Paramètres
-
pSample
-
Pointeur vers l’interface IMediaSample de l’exemple.
Valeur retournée
Retourne l’une des valeurs suivantes.
| Code de retour | Description |
|---|---|
|
Ignorez cet exemple. |
|
Fournissez cet exemple. |
Remarques
Appelez cette méthode lorsque votre code confidentiel reçoit un exemple. Fournissez l’exemple uniquement si la valeur de retour est flux continu _ . Si la valeur de retour est une annulation de flux _ , ignorez l’exemple.
Si le code PIN ignore les exemples, il doit marquer l’exemple suivant qu’il remet comme discontinu, en appelant la méthode IMediaSample :: SetDiscontinuity .
Si votre filtre implémente l’interface IAMDroppedFrames pour compter le nombre de frames qu’il supprime, ne comptez pas une trame ignorée en tant que frame supprimé.
Lorsque la valeur de retour est une suppression de flux _ , la méthode se bloque jusqu’à ce que le temps de référence atteigne l’heure de début de l’exemple. Cela empêche votre pin d’ignorer trop rapidement les exemples. Si le filtre est suspendu, le temps d’attente est infini, jusqu’à ce que le filtre exécute, arrête ou vide les données. (Les modifications d’état de filtre et la diffusion en continu se produisent sur des threads distincts, donc cela ne provoque aucun blocage).
L’énumération CBaseStreamControl :: StreamControlState est définie comme suit :
enum StreamControlState{
STREAM_FLOWING = 0x1000,
STREAM_DISCARDING
};
Exemples
L’exemple suivant suppose que le code confidentiel utilise une variable membre nommée m _ fLastSampleDiscarded pour effectuer le suivi des discontinuités.
CMyPin::Receive(IMediaSample *pSample)
{
if (!pSample) return E_POINTER;
int iStreamState = CheckStreamState(pSample);
if (iStreamState == STREAM_FLOWING)
{
if (m_fLastSampleDiscarded)
pSample->SetDiscontinuity(TRUE);
m_fLastSampleDiscarded = FALSE;
/* Deliver the sample. */
}
else
{
m_fLastSampleDiscarded = TRUE;
// Discard this sample. Do not deliver it.
}
}
Configuration requise
| Condition requise | Valeur |
|---|---|
| En-tête |
|
| Bibliothèque |
|