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 |
---|---|
|
Descarte este exemplo. |
|
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 |
|
Biblioteca |
|