CTransInPlaceFilter (clase)

[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.

Jerarquía de clases ctransinplacefilter

La CTransInPlaceFilter clase está diseñada para filtros de transformación en contexto, que son filtros que modifican los datos de entrada en lugar de copiar los datos entre búferes. Para usar esta clase, derive una nueva clase de CTransInPlaceFilter e implemente los métodos siguientes:

Esta clase usa la clase CTransInPlaceInputPin para su pin de entrada y la clase CTransInPlaceOutputPin para su pin de salida. Normalmente, no es necesario invalidar estas clases de patillas. El filtro crea ambos pines en el método CTransInPlaceFilter::GetPin . Si invalida las clases de anclaje, debe invalidar GetPin para crear los pines personalizados.

Esta clase está diseñada para que el tipo de entrada siempre coincida con el tipo de salida. Siempre que sea posible, el filtro usa un único asignador para ambas conexiones de patillas.

Tipos de medios preferidos

Si el pin de salida ya está conectado, el pin de entrada ofrece los tipos preferidos del filtro de bajada. (De hecho, simplemente devuelve el objeto enumerador del filtro de bajada). De lo contrario, no tiene tipos preferidos. El pin de salida tiene el mismo comportamiento, pero a la inversa: si el pin de entrada ya está conectado, el pin de salida ofrece los tipos preferidos del filtro ascendente. De lo contrario, no tiene tipos preferidos.

Anclar conexiones

Cuando se conecta un pin, el filtro generalmente vuelve a conectar el otro pin para asegurarse de que ambas patillas usan el mismo tipo de medio y el mismo asignador. (El mecanismo para volver a conectar patillas se describe en Reconexión de patillas). Dos escenarios son posibles: el pin de entrada se conecta primero o el pin de salida se conecta primero.

Supongamos que el pin de entrada se conecta primero. Tienen lugar los pasos siguientes:

  1. El pin de entrada llama al método CheckInputType del filtro para comprobar el tipo de medio.
  2. El filtro ascendente selecciona un asignador. En este momento, el pin de entrada no tiene requisitos de asignador y acepta ningún asignador para la conexión. Si el filtro ascendente solicita un asignador, el pin crea uno nuevo. Por motivos descritos en breve, este asignador no se usará en la conexión final. Solo se proporciona para ayudar a finalizar esta fase del proceso de conexión.

Más adelante, cuando el pin de salida se conecta:

  1. El pin de salida llama al método CheckInputType del filtro para comprobar el tipo de medio. También llama a IPin::QueryAccept en el filtro ascendente. Esto garantiza que el pin de entrada pueda cambiar su tipo de medio para que coincida.
  2. El pin de salida llama al método CheckInputType del filtro para comprobar el tipo de medio. También llama a IPin::QueryAccept en el filtro ascendente. Esto garantiza que el pin de entrada pueda cambiar su tipo de medio para que coincida.
  3. El pin de salida llama al método CheckInputType del filtro para comprobar el tipo de medio. También llama a IPin::QueryAccept en el filtro ascendente. Esto garantiza que el pin de entrada pueda cambiar su tipo de medio para que coincida.
  4. Esta vez, el método GetAllocator del pin de entrada devuelve el asignador de bajada y GetAllocatorRequirements devuelve los requisitos del asignador del filtro de bajada. El pin de entrada acepta el asignador que elija el filtro ascendente.
  5. Esta vez, el método GetAllocator del pin de entrada devuelve el asignador de bajada y GetAllocatorRequirements devuelve los requisitos del asignador del filtro de bajada. El pin de entrada acepta el asignador que elija el filtro ascendente.

Ahora considere el escenario opuesto, donde el pin de salida es el primer pin para conectarse.

  1. El pin de salida llama al método CheckInputType del filtro para comprobar el tipo de medio.
  2. Selecciona un asignador y prefiere usar el asignador del filtro de nivel inferior.

A continuación, cuando el pin de entrada se conecta:

  1. El pin de entrada comprueba el tipo de medio llamando a CheckInputType en el filtro y llamando a QueryAccept en el pin de salida del filtro de bajada.
  2. Si el tipo de entrada no coincide con el tipo de salida, el filtro vuelve a conectar el pin de salida.
  3. El filtro ascendente selecciona un asignador. El método GetAllocator del pin de entrada devuelve el asignador de nivel inferior y el pin de entrada acepta cualquier asignador que seleccione el filtro ascendente.
  4. El filtro usa el mismo asignador para la conexión de bajada, posiblemente invalidando el asignador de bajada original.

Esta secuencia de eventos cambia ligeramente si alguno de los asignadores implicados es de solo lectura, ya que el asignador de nivel inferior debe ser grabable. En ese caso, el filtro podría usar dos asignadores independientes.

Para obtener más información sobre el uso de esta clase, vea Escribir filtros de transformación.

Variables miembro protegidas Descripción
m_bModifiesData Indica si el filtro modifica los datos de ejemplo.
Métodos protegidos Descripción
Copiar Copia un ejemplo multimedia.
InputPin Recupera un puntero al pin de entrada del filtro.
OutputPin Recupera un puntero al pin de salida del filtro.
TypesMatch Determina si el tipo de medio de entrada coincide con el tipo de medio de salida.
Uso deDifferentAllocators Determina si las patillas de entrada y salida usan diferentes asignadores.
Métodos públicos Descripción
CTransInPlaceFilter Método constructor.
GetPin Recupera un pin.
GetMediaType Recupera un tipo de medio preferido para el pin de salida.
DecideBufferSize Establece los requisitos del búfer del pin de salida.
CheckTransform Comprueba si un tipo de medio de entrada es compatible con un tipo de medio de salida.
CompleteConnect Completa una conexión de patilla.
Recepción Recibe un ejemplo multimedia, lo procesa y lo entrega al filtro de bajada.
Métodos virtuales puros Descripción
Transform Transforma un ejemplo en contexto.

Requisitos

Requisito Value
Encabezado
Transip.h (include Streams.h)
Biblioteca
Strmbase.lib (compilaciones comerciales);
Strmbasd.lib (compilaciones de depuración)