Mutex de dispositivo no AVStream

Use o mutex do dispositivo para sincronizar objetos na hierarquia do dispositivo até os filtros. Cada dispositivo AVStream tem um único mutex de dispositivo associado. A criação e a destruição de fábricas de filtros e filtros são sincronizados com esse mutex. Determinadas operações de gerenciamento de energia e Plug and Play também são sincronizadas com esse mutex. O minidriver se concentra em dois problemas de main em relação ao mutex do dispositivo.

A hierarquia de objetos tem a garantia de ser estável somente do dispositivo até filtros individuais se o mutex do dispositivo for mantido. Como resultado, o minidriver deve obter o mutex do dispositivo antes de criar fábricas de filtro manualmente chamando KsCreateFilterFactory. O minidriver também deve obter o mutex do dispositivo antes de percorrer a hierarquia de objetos chamando as funções KsXxxGetFirstChildXxx e KsXxxGetNextSiblingXxx .

O AVStream mantém o mutex do dispositivo em nome do minidriver quando recebe as seguintes solicitações:

É importante observar que o mutex do dispositivo não pode ser obtido recursivamente. Considere o exemplo a seguir. O AVStream recebe uma notificação de suspensão. Conforme descrito acima, ele usa o mutex do dispositivo em nome do minidriver. Se o AVStream chamar uma rotina de retorno de chamada fornecida pelo minidriver no contexto do thread A, o minidriver não deverá tentar obter o mutex do dispositivo no thread A. Isso faz com que o thread A fique em deadlock consigo mesmo.

O AVStream geralmente obtém mutexes de controle de filtro enquanto o mutex do dispositivo já está mantido. Consequentemente, como regra geral, um thread que tenha tomado um mutex de controle de filtro não deve usar posteriormente o mutex do dispositivo.

Para manipular o mutex do dispositivo, use as seguintes funções:

KsAcquireDevice, KsReleaseDevice