Método IGraphConfig::Reconnect (strmif.h)

[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 Reconnect método executa uma reconexão dinâmica entre dois pinos.

Sintaxe

HRESULT Reconnect(
  [in] IPin                *pOutputPin,
  [in] IPin                *pInputPin,
  [in] const AM_MEDIA_TYPE *pmtFirstConnection,
  [in] IBaseFilter         *pUsingFilter,
  [in] HANDLE              hAbortEvent,
  [in] DWORD               dwFlags
);

Parâmetros

[in] pOutputPin

Ponteiro para a interface IPin de um pino de saída. Pode ser NULL, nesse caso , pInputPin não deve ser NULL.

[in] pInputPin

Ponteiro a interface IPin para um pino de entrada. Pode ser NULL, nesse caso , pOutputPin não deve ser NULL.

[in] pmtFirstConnection

Ponteiro para uma estrutura AM_MEDIA_TYPE que especifica o tipo de mídia para a primeira conexão de pino feita durante a reconexão. Se esse parâmetro for NULL, a primeira conexão poderá ter qualquer tipo de mídia.

[in] pUsingFilter

Ponteiro para um filtro opcional a ser usado na reconexão. O filtro já deve estar no grafo. Pode ser NULL.

[in] hAbortEvent

Identificador de um evento. Se o chamador for um filtro chamando em um de seus threads de processamento de dados, esse parâmetro deverá ser um identificador para um evento que será sinalizado quando o filtro for colocado em um estado interrompido. Caso contrário, esse parâmetro pode ser NULL. Para obter mais informações, consulte Comentários.

[in] dwFlags

Combinação de sinalizadores da enumeração AM_GRAPH_CONFIG_RECONNECT_FLAGS , especificando como executar a reconexão.

Retornar valor

Retorna S_OK se tiver êxito. Caso contrário, retorna um código de erro que pode ser um dos valores a seguir ou outros não listados.

Código de retorno Descrição
E_INVALIDARG
Argumento inválido. (Por exemplo, pInputPin e pOutputPin são NULL.)
E_NOINTERFACE
O pin de entrada não dá suporte a IPinConnection.
VFW_E_CANNOT_CONNECT
Não é possível conectar o filtro.
VFW_E_STATE_CHANGED
O estado do filtro foi alterado. Não é possível concluir a operação.

Comentários

Se você especificar apenas um pino, o método procurará o outro pino. Por padrão, no entanto, a pesquisa falhará se atingir um filtro que foi adicionado ao grafo por meio do método IFilterGraph::AddFilter . Para substituir esse comportamento, chame IGraphConfig::SetFilterFlags e defina o sinalizador AM_FILTER_FLAGS_REMOVABLE no filtro.

O processo de reconexão envolve várias etapas, a maioria delas tratadas dentro deste método:

  1. Primeiro, antes de chamar o método , bloqueie o fluxo de dados ao longo do caminho que está sendo reconfigurado. Os aplicativos devem chamar o método IPinFlowControl::Block para fazer isso. Se o chamador for um filtro, em vez de um aplicativo, possivelmente o filtro poderá controlar o fluxo de dados internamente.
  2. Os pinos de saída e entrada especificados definem os pontos iniciais e finais para a reconexão. O pin de entrada deve dar suporte à interface IPinConnection . Se você deixar um desses pinos não especificado (passando um parâmetro NULL ), o método pesquisará o grafo de filtro para encontrar um pino candidato para reconexão. (Para localizar um pino de entrada, ele pesquisa downstream do pino de saída; para localizar um pino de saída, ele pesquisa upstream do pino de entrada.)
  3. O método envia por push todos os dados pendentes por meio do grafo de filtro (por meio de uma chamada interna para IGraphConfig::P ushThroughData).
  4. Se você tiver especificado um filtro para inserir no grafo, o método conectará o pino de saída inicial ao pino de entrada do filtro e conectará o pino de saída do filtro ao pin de entrada final. Se você não especificar um filtro, o método simplesmente conectará o pino de saída ao pino de entrada. Em ambos os casos, o método insere todos os filtros de transformação necessários para concluir as conexões. (No entanto, você pode substituir esse comportamento definindo o sinalizador apropriado; para obter mais informações, consulte a descrição do parâmetro dwFlags .)
  5. Por fim, o método coloca os novos filtros em um estado em execução. Cabe ao chamador reiniciar o fluxo de dados. Os aplicativos podem fazer isso chamando IPinFlowControl::Block sem sinalizadores.
Se um filtro chamar esse método em um de seus próprios threads de processamento de dados, ele criará o potencial para um deadlock. O método obtém um bloqueio no grafo de filtro, que pode impedir que o filtro pare ao receber uma chamada para IMediaFilter::Stop. Para evitar essa situação, o método usa um identificador para um objeto de evento fornecido pelo filtro. O filtro deverá sinalizar o evento se ele receber uma chamada para seu método Stop .

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows XP [somente aplicativos da área de trabalho]
Servidor mínimo com suporte Windows Server 2003 [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

IGraphConfig Interface