Compartir a través de


CTransformFilter (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 ctransformfilter

La CTransformFilter clase es una clase base para implementar filtros de transformación. Esta clase está diseñada para implementar un filtro de transformación con un pin de entrada y un pin de salida. Usa asignadores independientes para el pin de entrada y el pin de salida. Para crear un filtro que procese los datos en su lugar, use la clase CTransInPlaceFilter .

Este filtro usa la clase CTransformInputPin para su pin de entrada y la clase CTransformOutputPin para su pin de salida. Normalmente, no es necesario invalidar estas clases de patillas. La mayoría de los métodos pin llaman a los métodos correspondientes en la CTransformFilter clase , por lo que puede invalidar los métodos de filtro si es necesario. El filtro crea ambos pines en el método CTransformFilter::GetPin . Si invalida las clases de anclaje, debe invalidar GetPin para crear los pines personalizados.

Para usar esta clase, derive una nueva clase de CTransformFilter e implemente los métodos siguientes:

Es posible que también tenga que invalidar otros métodos, en función de los requisitos del filtro.

Tipos de medios

El pin de entrada de este filtro no propone ningún tipo de medio; se basa en el filtro ascendente para proponer los tipos de medios para la conexión. El motivo de este diseño es que, en la mayoría de los casos, el filtro ascendente puede proporcionar más información sobre el formato. Por ejemplo, con formatos de vídeo, el filtro ascendente conoce las dimensiones de vídeo y la velocidad de fotogramas, mientras que el filtro de transformación no tiene forma de determinar esta información. Si desea cambiar este comportamiento, invalide el método GetMediaType del pin de entrada. Cuando el filtro ascendente propone un tipo de medio, el pin de entrada llama al método CheckInputType del filtro (virtual puro).

Hasta que se conecte el pin de entrada, el pin de salida rechaza todas las conexiones y no devuelve ningún tipo de medio preferido. Una vez conectado el pin de entrada, el pin de salida devuelve una lista de tipos preferidos mediante una llamada al método GetMediaType del filtro. Comprueba los tipos de salida de la conexión a través del método CheckTransform del filtro. (Ambos métodos son virtuales puros). Normalmente, el tipo de entrada determinará en parte los tipos de salida aceptables.

En función del filtro, es posible que desee registrar algunos de los tipos de medios admitidos del filtro para que el objeto Filter Mapper pueda localizar el filtro. Para obtener más información, vea Cómo registrar filtros directShow.

Streaming

Esta clase no pone en cola los datos de salida. Cada ejemplo de salida se entrega dentro del método IMemInputPin::Receive . El método Receive llama al método Transform del filtro (también virtual puro) para procesar los datos.

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

Variables miembro protegidas Descripción
m_bEOSDelivered Marca que indica si el filtro ha enviado una notificación de fin de secuencia.
m_bSampleSkipped Marca que indica si se quitó el ejemplo más reciente.
m_bQualityChanged Marca que indica si la calidad ha cambiado.
m_csFilter Sección crítica que protege el estado del filtro.
m_csReceive Sección crítica que protege el estado de streaming.
m_pInput Puntero al pin de entrada.
m_pOutput Puntero al pin de salida.
Métodos públicos Descripción
CTransformFilter Método constructor.
~ CTransformFilter Método de destructor.
GetPinCount Recupera el número de patillas del filtro. Virtual.
GetPin Recupera un pin. Virtual.
Transform Transforma un ejemplo de entrada para generar un ejemplo de salida. Virtual.
StartStreaming Se llama cuando el filtro cambia al estado en pausa. Virtual.
StopStreaming Se llama cuando el filtro cambia al estado detenido. Virtual.
AlterQuality Notifica al filtro que se solicita un cambio de calidad. Virtual.
SetMediaType Se llama cuando el tipo de medio se establece en una de las patillas del filtro. Virtual.
CheckConnect Determina si una conexión de patilla es adecuada. Virtual.
BreakConnect Libera un pin de una conexión. Virtual.
CompleteConnect Completa una conexión de patilla. Virtual.
Recepción Recibe un ejemplo multimedia, lo procesa y entrega un ejemplo de salida al filtro de bajada. Virtual.
InitializeOutputSample Recupera un nuevo ejemplo de salida y lo inicializa.
EndOfStream Notifica al filtro que no se espera ningún dato adicional desde el pin de entrada. Virtual.
BeginFlush Comienza una operación de vaciado. Virtual.
EndFlush Finaliza una operación de vaciado. Virtual.
NewSegment Notifica al filtro que los ejemplos multimedia recibidos después de esta llamada se agrupan como un segmento. Virtual.
Métodos virtuales puros Descripción
CheckInputType Comprueba si un tipo de medio especificado es aceptable para la entrada.
CheckTransform Comprueba si un tipo de medio de entrada es compatible con un tipo de medio de salida.
DecideBufferSize Establece los requisitos del búfer del pin de salida.
GetMediaType Recupera un tipo de medio preferido para el pin de salida.
Métodos IMediaFilter Descripción
Stop Detiene el filtro.
Pausa Pausa el filtro.
Métodos IBaseFilter Descripción
FindPin Recupera el pin con el identificador especificado.

Requisitos

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