Compartir a través de


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

[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 Reconnect método realiza una reconexión dinámica entre dos patillas.

Sintaxis

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

Puntero a la interfaz IPin de un pin de salida. Puede ser NULL, en cuyo caso pInputPin no debe ser NULL.

[in] pInputPin

Puntero a la interfaz IPin a un pin de entrada. Puede ser NULL, en cuyo caso pOutputPin no debe ser NULL.

[in] pmtFirstConnection

Puntero a una estructura de AM_MEDIA_TYPE que especifica el tipo de medio para la primera conexión de patilla realizada durante la reconexión. Si este parámetro es NULL, la primera conexión puede tener cualquier tipo de medio.

[in] pUsingFilter

Puntero a un filtro opcional que se va a usar en la reconexión. El filtro ya debe estar en el gráfico. Puede ser NULL.

[in] hAbortEvent

Identificador para un evento. Si el autor de la llamada es un filtro que llama a en uno de sus subprocesos de procesamiento de datos, este parámetro debe ser un identificador de un evento que se indicará cuando el filtro se coloque en un estado detenido. De lo contrario, este parámetro puede ser NULL. Para obtener más información, vea la sección Comentarios.

[in] dwFlags

Combinación de marcas de la enumeración AM_GRAPH_CONFIG_RECONNECT_FLAGS , especificando cómo realizar la reconexión.

Valor devuelto

Devuelve S_OK si se ejecuta correctamente. De lo contrario, devuelve un código de error que puede ser uno de los valores siguientes u otros no enumerados.

Código devuelto Descripción
E_INVALIDARG
Argumento no válido. (Por ejemplo, pInputPin y pOutputPin son NULL).
E_NOINTERFACE
El pin de entrada no admite IPinConnection.
VFW_E_CANNOT_CONNECT
No se puede conectar el filtro.
VFW_E_STATE_CHANGED
El estado del filtro ha cambiado. No se puede completar la operación.

Comentarios

Si especifica solo un pin, el método buscará el otro pin. Sin embargo, de forma predeterminada, se produce un error en la búsqueda si alcanza un filtro que se agregó al gráfico mediante el método IFilterGraph::AddFilter . Para invalidar este comportamiento, llame a IGraphConfig::SetFilterFlags y establezca la marca AM_FILTER_FLAGS_REMOVABLE en el filtro.

El proceso de reconexión implica varios pasos, la mayoría de ellos se controlan dentro de este método:

  1. En primer lugar, antes de llamar al método , asegúrese de bloquear el flujo de datos a lo largo de la ruta de acceso que se está reconfigurando. Las aplicaciones deben llamar al método IPinFlowControl::Block para hacerlo. Si el autor de la llamada es un filtro, en lugar de una aplicación, posiblemente el filtro pueda controlar el flujo de datos internamente.
  2. Las patillas de entrada y salida especificadas definen los puntos inicial y final para la reconexión. El pin de entrada debe admitir la interfaz IPinConnection . Si deja uno de estos patillas sin especificar (pasando un parámetro NULL ), el método busca en el gráfico de filtros un pin candidato para volver a conectarse. (Para buscar un pin de entrada, busca hacia abajo desde el pin de salida; para buscar un pin de salida, busca en la cadena ascendente desde el pin de entrada).
  3. El método inserta los datos pendientes a través del gráfico de filtros (mediante una llamada interna a IGraphConfig::P ushThroughData).
  4. Si ha especificado un filtro para insertar en el gráfico, el método conecta el pin de salida inicial al pin de entrada del filtro y conecta el pin de salida del filtro al pin de entrada final. Si no especifica un filtro, el método simplemente conecta el pin de salida al pin de entrada. En cualquier caso, el método inserta los filtros de transformación necesarios para completar las conexiones. (Sin embargo, puede invalidar este comportamiento estableciendo la marca adecuada; para obtener más información, consulte la descripción del parámetro dwFlags ).
  5. Por último, el método coloca los nuevos filtros en un estado en ejecución. Depende del autor de la llamada reiniciar el flujo de datos. Las aplicaciones pueden hacerlo llamando a IPinFlowControl::Block sin marcas.
Si un filtro llama a este método en uno de sus propios subprocesos de procesamiento de datos, crea la posibilidad de un interbloqueo. El método obtiene un bloqueo en el gráfico de filtros, que puede impedir que el filtro se detenga al recibir una llamada a IMediaFilter::Stop. Para evitar esta situación, el método toma un identificador a un objeto de evento proporcionado por filter. El filtro debe indicar el evento si recibe una llamada a su método Stop .

Requisitos

Requisito Value
Cliente mínimo compatible Windows XP [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows Server 2003 [solo aplicaciones de escritorio]
Plataforma de destino Windows
Encabezado strmif.h (incluye Dshow.h)
Library Strmiids.lib

Consulte también

Códigos de error y éxito

IGraphConfig (interfaz)