Compartir a través de


Método CBaseStreamControl.CheckStreamState

[La característica asociada a esta página, DirectShow, es una característica heredada. Se ha reemplazado por MediaPlayer, IMFMediaEngine y Captura de audio/vídeo en Media Foundation. Esas características se han optimizado para Windows 10 y Windows 11. Microsoft recomienda encarecidamente que el nuevo código use MediaPlayer, IMFMediaEngine y Audio/Video Capture en Media Foundation en lugar de DirectShow, siempre que sea posible. Microsoft sugiere que el código existente que usa las API heredadas se reescriba para usar las nuevas API si es posible.

El CheckStreamState método determina si se debe entregar o descartar un ejemplo multimedia.

Sintaxis

enum CheckStreamState(
   IMediaSample *pSample
);

Parámetros

pSample

Puntero a la interfaz IMediaSample del ejemplo.

Valor devuelto

Devuelve uno de los valores siguientes.

Código devuelto Descripción
STREAM_DISCARDING
Descarte este ejemplo.
STREAM_FLOWING
Entregue este ejemplo.

Observaciones

Llame a este método cuando el pin reciba un ejemplo. Entregue el ejemplo solo si el valor devuelto es STREAM_FLOWING. Si el valor devuelto es STREAM_DISCARDING, descarte el ejemplo.

Si el pin descarta los ejemplos, debe marcar el siguiente ejemplo que entrega como discontinuidad mediante una llamada al método IMediaSample::SetDiscontinuity .

Si el filtro implementa la interfaz IAMDroppedFrames para contar cuántos fotogramas quita, no cuente un marco descartado como marco descartado.

Cuando se STREAM_DISCARDING el valor devuelto, el método se bloquea hasta que la hora de referencia alcanza la hora de inicio de la muestra. Esto impide que el pin descarte muestras demasiado rápidamente. Si el filtro está en pausa, el tiempo de espera es infinito, hasta que se ejecute, detenga o vacíe los datos. (Filtrar los cambios de estado y el streaming se producen en subprocesos independientes, por lo que esto no provoca ningún interbloqueo).

La enumeración CBaseStreamControl::StreamControlState se define de la siguiente manera:

enum StreamControlState{ 
    STREAM_FLOWING = 0x1000,
    STREAM_DISCARDING
};

Ejemplos

En el ejemplo siguiente se supone que el pin usa una variable miembro denominada m_fLastSampleDiscarded para realizar un seguimiento de las discontinuidades.

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 Value
Encabezado
Strmctl.h (include Streams.h)
Biblioteca
Strmbase.lib (compilaciones comerciales);
Strmbasd.lib (compilaciones de depuración)

Consulte también

CBaseStreamControl (clase)