Partilhar via


Método CBaseStreamControl.CheckStreamState

[O recurso associado a esta página, DirectShow, é um recurso herdado. Ele foi substituído por MediaPlayer, IMFMediaEngine e Captura de Áudio/Vídeo na Media Foundation. Esses recursos foram otimizados para Windows 10 e Windows 11. A Microsoft recomenda fortemente que o novo código use MediaPlayer, IMFMediaEngine e Captura de Áudio/Vídeo no Media Foundation em vez de DirectShow, quando possível. A Microsoft sugere que o código existente que usa as APIs herdadas seja reescrito para usar as novas APIs, se possível.]

O CheckStreamState método determina se um exemplo de mídia deve ser entregue ou descartado.

Sintaxe

enum CheckStreamState(
   IMediaSample *pSample
);

Parâmetros

pSample

Ponteiro para a interface IMediaSample do exemplo.

Retornar valor

Retorna um dos valores a seguir.

Código de retorno Descrição
STREAM_DISCARDING
Descarte este exemplo.
STREAM_FLOWING
Entregue este exemplo.

Comentários

Chame esse método quando o pin receber uma amostra. Entregue o exemplo somente se o valor retornado for STREAM_FLOWING. Se o valor retornado for STREAM_DISCARDING, descarte o exemplo.

Se o pino descartar amostras, ele deverá marcar o próximo exemplo que ele fornece como uma descontinuidade, chamando o método IMediaSample::SetDiscontinuity .

Se o filtro implementar a interface IAMDroppedFrames para contar quantos quadros ele descarta, não conte um quadro descartado como um quadro descartado.

Quando o valor retornado é STREAM_DISCARDING, o método bloqueia até que o tempo de referência atinja a hora de início da amostra. Isso impede que o pin descarte amostras muito rapidamente. Se o filtro estiver pausado, o tempo de espera será infinito, até que o filtro seja executado, pare ou libere dados. (As alterações de estado de filtro e o streaming ocorrem em threads separados, portanto, isso não causa nenhum deadlock.)

A enumeração CBaseStreamControl::StreamControlState é definida da seguinte maneira:

enum StreamControlState{ 
    STREAM_FLOWING = 0x1000,
    STREAM_DISCARDING
};

Exemplos

O exemplo a seguir pressupõe que o pino usa uma variável de membro chamada m_fLastSampleDiscarded para controlar descontinuidades.

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.
    }
}

Requisitos

Requisito Valor
parâmetro
Strmctl.h (inclua Streams.h)
Biblioteca
Strmbase.lib (builds de varejo);
Strmbasd.lib (builds de depuração)

Confira também

Classe CBaseStreamControl