Almacenamiento en caché de información de patillas para DirectShow

Una aplicación puede usar la interfaz IFilterMapper2 de DirectShow para buscar automáticamente filtros que cumplan determinados criterios. Esta aplicación puede usar la lista de filtros propuestos que IFilterMapper2 devuelve para crear automáticamente gráficos de filtros con filtros que reciben y representan señales de televisión. Para buscar rápidamente filtros que cumplan los criterios especificados, IFilterMapper2 usa información sobre un filtro y sus patillas que se especificaron anteriormente en una memoria caché. La explicación de los párrafos siguientes hace referencia a esta memoria caché como caché de datos de anclaje.

La información contenida en la caché de datos de patillas incluye una lista de medios y tipos de medios para cada patilla que el filtro pueda exponer. IFilterMapper2 usa esta información de caché para determinar si un posible filtro puede conectarse a un pin en un filtro que ya está en el gráfico. Esta determinación elimina la sobrecarga de crear una instancia de un filtro solo para determinar que la conexión al filtro se impide porque un tipo medio o multimedia no coincide. Si la caché de datos de anclaje de un filtro no está actualizada, un filtro podría eliminarse erróneamente como candidato para la conexión en un gráfico de filtros.

Cada vez que un minidriver de BDA determina que su caché de datos de patillas que usa DirectShow no está actualizada, ese minidriver debe actualizar la caché de datos de anclaje para que la información de anclaje para las instancias de filtro BDA del componente BDA del minidriver se exponga con precisión en un gráfico de filtros. Un minidriver de BDA actualiza la caché de datos de anclaje de DirectShow, tal como se describe en los escenarios siguientes:

  • Un minidriver BDA puede o no ser necesario para actualizar la caché de datos de anclaje de DirectShow cuando el minidriver crea inicialmente instancias de filtro BDA en función de cómo ese minidriver presente filtros BDA como filtros DirectShow en modo de usuario. El archivo de información (INF) de un minidriver BDA especifica el mecanismo que usa el minidriver para presentar sus filtros BDA como filtros DirectShow.

    Los minidrivers de BDA suelen usar el módulo proxy de streaming de kernel (KS) (Ksproxy.ax) para presentar sus filtros BDA como filtros DirectShow. El proxy KS actualiza automáticamente la caché de datos de anclaje de DirectShow para exponer la información de patillas de los filtros BDA cada vez que se crean inicialmente instancias de esos filtros. Por lo tanto, los minidrivers de BDA que usan el proxy KS no son necesarios para realizar ninguna acción para actualizar la caché de datos de anclaje de DirectShow cuando crean inicialmente instancias de filtros. Si un filtro BDA se expone al modo de usuario a través del proxy KS, la información almacenada en caché incluye automáticamente los medios y tipos de medios de los generadores de patillas que existen en la instancia de filtro inmediatamente después de que se devuelva la rutina de envío de creación del filtro.

    Algunos minidrivers de BDA no usan el proxy KS para presentar sus filtros BDA como filtros directShow. Por ejemplo, los minidriveres receptores BDA que implementan filtros BDA para recibir o procesar señales analógicas de televisión usan los módulos KSTVTune.ax o KSXBar.ax para presentar estos filtros BDA como filtros DirectShow. Dado que estos módulos no usan métodos de interfaz de proxy KS estándar para actualizar la caché de datos de anclaje de DirectShow, los minidrivers de BDA para estos tipos de filtros BDA deben actualizar la caché de datos de anclaje de DirectShow cuando esos minidrivers crean inicialmente instancias de filtros. Para asegurarse de que la caché de datos de anclaje de DirectShow se actualiza cuando se crean instancias de estos filtros, un minidriver BDA llama a la función BdaFilterFactoryUpdateCacheData inmediatamente después de llamar a la función BdaInitFilter dentro de la implementación de la rutina de envío de creación del filtro. En esta llamada, el minidriver pasa información de patillas para actualizar todas las patillas iniciales del filtro.

  • Las patillas se pueden crear en un filtro BDA dinámicamente después de que se complete la rutina de envío de creación del filtro. Si la instancia creada inicialmente de un filtro BDA no expone instancias de todas las patillas que aparecen en la topología de plantilla del filtro BDA (BDA_FILTER_TEMPLATE), el minidriver de BDA debe llamar a BdaFilterFactoryUpdateCacheData para forzar información sobre todas las patillas enumeradas en la topología de plantilla del filtro.

Nota La actualización de la caché de datos de anclaje de DirectShow tiene una sobrecarga significativa porque toca y modifica el registro. Además, la actualización de la caché de datos de anclaje de DirectShow afecta a la cantidad de tiempo necesario para que DirectShow compile automáticamente gráficos de filtros. Por lo tanto, un minidriver de BDA debe llamar a BdaFilterFactoryUpdateCacheData para todos los pines posibles solo cuando determina que su caché de datos de patillas que usa DirectShow no está actualizada.

Si es posible, un minidriver BDA debe llamar a BdaFilterFactoryUpdateCacheData siempre que se haya producido una actualización de controlador, firmware o hardware.