Compartilhar via


Método ICaptureGraphBuilder2::ControlStream (strmif.h)

[O recurso associado a esta página, DirectShow, é um recurso herdado. Foi substituído por MediaPlayer, IMFMediaEngine e Audio/Video Capture in 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 Audio/Video Capture in 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 ControlStream método define os horários de início e parada para um ou mais fluxos de dados capturados.

Sintaxe

HRESULT ControlStream(
  [in] const GUID     *pCategory,
  [in] const GUID     *pType,
  [in] IBaseFilter    *pFilter,
  [in] REFERENCE_TIME *pstart,
  [in] REFERENCE_TIME *pstop,
  [in] WORD           wStartCookie,
  [in] WORD           wStopCookie
);

Parâmetros

[in] pCategory

Um ponteiro para um GUID que especifica uma das categorias de pino listadas no Conjunto de Propriedades do Pin. O valor desse parâmetro não pode ser NULL.

[in] pType

Ponteiro para um GUID de tipo principal que especifica o tipo de mídia ou NULL. Se esse parâmetro for NULL, defina o parâmetro pFilter como NULL também. Caso contrário, você pode controlar o pino errado e obter resultados imprevisíveis.

[in] pFilter

Ponteiro para uma interface IBaseFilter que especifica qual filtro controlar. Para controlar todos os filtros de captura no grafo, defina esse parâmetro como NULL.

[in] pstart

Ponteiro para uma variável que contém a hora de início. Se o valor for MAXLONGLONG (0x7FFFFFFFFFFFFFFF), o método cancelará a solicitação inicial anterior. Se o valor for NULL, o pin será iniciado imediatamente quando o grafo for executado.

[in] pstop

Ponteiro para uma variável que contém o tempo de parada. Se o valor for MAXLONGLONG, o método cancelará qualquer solicitação de parada anterior. Se o valor for NULL, o pin será interrompido imediatamente.

[in] wStartCookie

Valor que é enviado como o segundo parâmetro do EC_STREAM_CONTROL_STARTED notificação de evento. Confira Comentários para obter mais informações.

[in] wStopCookie

Valor que é enviado como o segundo parâmetro do EC_STREAM_CONTROL_STOPPED notificação de evento. Confira Comentários para obter mais informações.

Retornar valor

Retorna um valor HRESULT . Os possíveis valores incluem os seguintes.

Código de retorno Descrição
S_FALSE
Pelo menos um renderizador downstream não enviará uma notificação de parada.
S_OK
Êxito.
E_FAIL
Não foi possível encontrar um pino correspondente ou o pino não deu suporte ao controle de fluxo.
E_POINTER
Argumento de ponteiro NULL.

Comentários

Esse método localiza pinos de saída em filtros de captura, usando critérios de pesquisa que você fornece na chamada de método. Em seguida, ele chama os métodos IAMStreamControl nesses pinos. Esse método permite que um aplicativo controle fluxos sem que o aplicativo precise enumerar os filtros e os pinos no grafo.

Use esse método para captura com precisão de quadro ou para controle individual de captura e visualização. Por exemplo, você pode parar de capturar em disco, mas deixar a visualização de vídeo em execução.

Os três primeiros parâmetros especificam quais pinos controlar. Um grafo de captura pode ter mais de um filtro de captura. Por exemplo, ele pode ter filtros para vídeo, áudio e dados de legendagem oculta. Além disso, um filtro de captura pode ter mais de um pino de saída. Alguns filtros de captura têm pinos separados para visualização e captura ou pinos separados para dados somente vídeo e dados intercalados de áudio/vídeo. Para controlar a visualização de vídeo, por exemplo, especifique PIN_CATEGORY_PREVIEW para pCategory e MEDIATYPE_Video para pType.

Observação  

Se a categoria de pino for PIN_CATEGORY_PREVIEW, você não poderá definir horários de início e parada específicos, pois os exemplos entregues por um pino de visualização não têm carimbos de data/hora (consulte Carimbos de Data/Hora). Em vez disso, use os valores NULL e MAXLONGLONG para iniciar e parar o pino nos horários desejados.

Além disso, esse método não terá suporte para visualização se o dispositivo usar um pino de porta de vídeo, pois nesse caso o dispositivo está fornecendo os exemplos de visualização diretamente por hardware.

 
Para controlar um pin, esse método chama os métodos IAMStreamControl::StartAt e IAMStreamControl::StopAt . Cada pin envia uma notificação de evento EC_STREAM_CONTROL_STARTED quando é iniciado. O segundo parâmetro da notificação de evento é o valor fornecido em wStartCookie. Quando o pino é interrompido, ele envia uma notificação de evento EC_STREAM_CONTROL_STOPPED . O segundo parâmetro dessa notificação de evento é o valor fornecido em wStopCookie.

Quando esse método localiza um pino correspondente, ele pesquisa downstream por outro filtro que dá suporte a IAMStreamControl (normalmente um multiplexador). Se encontrar um, ele também definirá os horários de início e parada nesse filtro. Isso gera dois pares de notificações de parada: um para o filtro de captura e outro para o filtro downstream. Somente a notificação de parada do filtro downstream usa o parâmetro wStopCookie . Aguardar esse evento garante que o filtro downstream receba o último exemplo.

Se nenhum filtro downstream der suporte a IAMStreamControl, o método retornará S_FALSE. Nesse caso, você pode receber a notificação de parada antes que o último exemplo seja renderizado.

MAXLONGLONG é o maior valor de REFERENCE_TIME possível. Na biblioteca de classes base do DirectShow, ela também é definida como a constante MAX_TIME.

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows 2000 Professional [somente aplicativos da área de trabalho]
Servidor mínimo com suporte Windows 2000 Server [somente aplicativos da área de trabalho]
Plataforma de Destino Windows
Cabeçalho strmif.h (inclua Dshow.h)
Biblioteca Strmiids.lib

Confira também

Códigos de erro e êxito

ICaptureGraphBuilder2 Interface