Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Cada instância de filtro AVStream tem um mutex de controle de filtro associado. Esse mutex é usado para sincronizar o acesso à hierarquia de objetos, desde o filtro até aos pinos individuais. Criação e destruição de filtros e pinos é sincronizada com este mutex.
A hierarquia de objetos é garantida para ser estável apenas a partir de uma instância de filtro específica para baixo enquanto o mutex de controle de filtro é mantido. Assim, o minidriver deve obter o mutex de controle de filtro antes de percorrer a hierarquia de objetos abaixo do nível de filtro usando as funções KsXxxGetFirstChildXxx e KsXxxGetNextSiblingXxx.
O mutex de controlo do filtro também é utilizado para sincronizar transições de estado.
O AVStream obtém o mutex de controle de filtro quando manipula propriedades que exigem que a hierarquia permaneça estável, como ao realizar a modificação do descritor.
Lembre-se de que um único mutex de controle de filtro é usado para a hierarquia de objetos sob cada filtro individual. Isso significa que um objeto "pin" utiliza o mutex de controle do filtro do elemento pai quando um minidriver invoca uma função com um objeto "pin".
O AVStream mantém o mutex de controle do filtro em nome do minidriver quando ele chama as seguintes rotinas fornecidas pelo minidriver:
À semelhança do dispositivo mutex, o mutex de controlo do filtro não deve ser obtido recursivamente. Se, por exemplo, o AVStream realizar um callback para um minidriver para um despacho Create no contexto da thread A, e o minidriver mais tarde tentar obter o mutex de dentro da thread A, a thread A ficará bloqueada consigo mesma.
Um impasse pode ocorrer se você executar uma das seguintes ações:
Tente adquirir o mutex de controle de filtro de dentro da rotina do processo.
Tente obter o mutex de controlo do filtro dentro do callback para o modo Sleep ou Wake.
Para manipular o mutex de controle de filtro, use as seguintes funções:
KsAcquireControl, KsFilterAcquireControl, KsPinAcquireControl, KsReleaseControl, KsFilterReleaseControl, KsPinReleaseControl