Informações de fixação em cache para DirectShow
Um aplicativo pode usar a interface IFilterMapper2 do DirectShow para pesquisar automaticamente filtros que atendam a determinados critérios. Esse aplicativo pode usar a lista de filtros propostos que iFilterMapper2 retorna para criar grafos de filtro automaticamente com filtros que recebem e renderizam sinais de televisão. Para localizar rapidamente filtros que atendam aos critérios especificados, iFilterMapper2 usa informações sobre um filtro e seus pinos que foram inseridos anteriormente em um cache. A discussão nos parágrafos a seguir refere-se a esse cache como o cache de dados de fixação.
As informações contidas no cache de dados de pin incluem uma lista de meios e tipos de mídia para cada pino que o filtro pode expor. IFilterMapper2 usa essas informações de cache para determinar se um possível filtro pode se conectar a um pino em um filtro que já está no grafo. Fazer essa determinação elimina a sobrecarga de criar uma instância de um filtro apenas para determinar que a conexão com o filtro é impedida porque um tipo médio ou de mídia não corresponde. Se o cache de dados de fixação de um filtro não estiver atualizado, um filtro poderá ser eliminado incorretamente como um candidato para conexão em um grafo de filtro.
Sempre que um minidriver BDA determina que seu cache de dados de fixação que o DirectShow usa não está atualizado, esse minidriver deve atualizar o cache de dados de fixação para que as informações de fixação para instâncias de filtro BDA do componente BDA do minidriver sejam expostas com precisão em um grafo de filtro. Um minidriver BDA atualiza o cache de dados de fixação do DirectShow, conforme descrito nos seguintes cenários:
Um minidriver BDA pode ou não ser necessário para atualizar o cache de dados de fixação do DirectShow quando o minidriver cria inicialmente instâncias de filtro BDA dependendo de como esse minidriver apresenta filtros BDA como filtros DirectShow no modo de usuário. Um arquivo INF (informações do minidriver BDA) especifica o mecanismo que o minidriver usa para apresentar seus filtros BDA como filtros DirectShow.
Os minidrivers BDA normalmente usam o módulo proxy KS (kernel-streaming) (Ksproxy.ax) para apresentar seus filtros BDA como filtros DirectShow. O proxy KS atualiza automaticamente o cache de dados de fixação do DirectShow para expor informações de pino para filtros BDA sempre que instâncias desses filtros forem criadas inicialmente. Portanto, os minidrivers BDA que usam o proxy KS não são obrigados a executar nenhuma ação para atualizar o cache de dados de fixação do DirectShow quando eles criam inicialmente instâncias de filtros. Se um filtro BDA for exposto ao modo de usuário por meio do proxy KS, as informações armazenadas em cache incluirão automaticamente os meios e os tipos de mídia para as fábricas de pinos que existem na instância de filtro imediatamente após o retorno da rotina de expedição de criação do filtro.
Alguns minidrivers BDA não usam o proxy KS para apresentar seus filtros BDA como filtros DirectShow. Por exemplo, minidrivers receptores BDA que implementam filtros BDA para receber ou processar sinais de televisão analógicos usam os módulos KSTVTune.ax ou KSXBar.ax para apresentar esses filtros BDA como filtros DirectShow. Como esses módulos não usam métodos padrão de interface proxy KS para atualizar o cache de dados de fixação do DirectShow, os minidrivers BDA para esses tipos de filtros BDA devem atualizar o cache de dados de fixação do DirectShow quando esses minidrivers inicialmente criam instâncias de filtros. Para garantir que o cache de dados de fixação do DirectShow seja atualizado quando instâncias desses filtros forem criadas, um minidriver BDA chama a função BdaFilterFactoryUpdateCacheData imediatamente após chamar a função BdaInitFilter dentro da implementação da rotina de expedição de criação do filtro. Nessa chamada, o minidriver passa informações de fixação para atualizar todos os pinos iniciais no filtro.
Os pinos podem ser criados em um filtro BDA dinamicamente após a conclusão da rotina de expedição de criação do filtro. Se a instância inicialmente criada de um filtro BDA não expor instâncias de todos os pinos listados na topologia de modelo do filtro BDA (BDA_FILTER_TEMPLATE), o minidriver BDA deverá chamar BdaFilterFactoryUpdateCacheData para forçar informações sobre todos os pinos listados na topologia de modelo do filtro.
Nota Atualizar o cache de dados de fixação do DirectShow tem uma sobrecarga significativa porque ele toca e modifica o registro. Além disso, a atualização do cache de dados de fixação do DirectShow afeta o tempo necessário para o DirectShow criar grafos de filtro automaticamente. Portanto, um minidriver BDA deve chamar BdaFilterFactoryUpdateCacheData para todos os pinos possíveis somente quando determinar que seu cache de dados de fixação que o DirectShow usa não está atualizado.
Se possível, um minidriver BDA deve chamar BdaFilterFactoryUpdateCacheData sempre que ocorrer uma atualização de driver, firmware ou hardware.