Compartir a través de


Paso 1. Elegir una clase base

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

Este es el paso 1 del tutorial Escritura de filtros de transformación.

Suponiendo que decide escribir un filtro y no un DMO, el primer paso es elegir qué clase base usar. Las siguientes clases son adecuadas para los filtros de transformación:

  • CTransformFilter está diseñado para filtros de transformación que usan búferes de entrada y salida independientes. Este tipo de filtro a veces se denomina filtro de transformación de copia. Cuando un filtro de copia-transformación recibe un ejemplo de entrada, escribe nuevos datos en un ejemplo de salida y entrega el ejemplo de salida al siguiente filtro.

  • CTransInPlaceFilter está diseñado para filtros que modifican datos en el búfer original, también denominados filtros trans-in-place. Cuando un filtro trans-in-place recibe una muestra, cambia los datos dentro de ese ejemplo y entrega la misma muestra de bajada. El pin de entrada y el pin de salida del filtro siempre se conectan con tipos de medios coincidentes.

  • CVideoTransformFilter está diseñado principalmente para descodificadores de vídeo. Se deriva de CTransformFilter, pero incluye funcionalidad para quitar fotogramas si el representador de bajada está detrás.

  • CBaseFilter es una clase de filtro genérica. Las demás clases de esta lista derivan de CBaseFilter. Si ninguno de ellos es adecuado, puede revertir a esta clase. Sin embargo, esta clase también requiere el mayor trabajo por su parte.

  • Importante

    Las transformaciones de vídeo en contexto pueden tener un impacto grave en el rendimiento de la representación. Las transformaciones en contexto requieren operaciones de lectura y modificación y escritura en el búfer. Si la memoria reside en una tarjeta gráfica, las operaciones de lectura son significativamente más lentas. Además, incluso una transformación de copia puede provocar operaciones de lectura no deseadas si no la implementa con cuidado. Por lo tanto, siempre debe realizar pruebas de rendimiento si escribe una transformación de vídeo.

     

Para el codificador RLE de ejemplo, la mejor opción es CTransformFilter o CVideoTransformFilter. De hecho, las diferencias entre ellas son en gran medida internas, por lo que es fácil convertir de una a otra. Dado que los tipos de medios deben ser diferentes en los dos pines, la clase CTransInPlaceFilter no es adecuada para este filtro. En este ejemplo se usará CTransformFilter.

Siguiente: Paso 2. Declare la clase Filter.

Escribir filtros directShow