Condividi tramite


Dispositivo Mutex in AVStream

Usare il mutex del dispositivo per sincronizzare gli oggetti nella gerarchia dal dispositivo verso il basso ai filtri. Ogni dispositivo AVStream ha un singolo mutex del dispositivo associato. La creazione e la distruzione sia delle factory di filtri che dei filtri vengono sincronizzate con questo mutex. Alcune operazioni di Plug and Play e risparmio energia vengono sincronizzate anche con questo mutex. Il minidriver si concentra su due problemi principali relativi al mutex del dispositivo.

La gerarchia degli oggetti è garantita che sia stabile solo dal dispositivo verso il basso ai singoli filtri se il mutex del dispositivo è mantenuto. Di conseguenza, il minidriver deve ottenere il mutex del dispositivo prima di creare manualmente le factory di filtri chiamando KsCreateFilterFactory. Il minidriver deve anche ottenere il mutex del dispositivo prima di attraversare la gerarchia di oggetti chiamando le funzioni KsXxxGetFirstChildXxx e Ks Xxx GetNextSiblingXxx.

AVStream contiene il mutex del dispositivo per conto del minidriver quando riceve le richieste seguenti:

È importante notare che il mutex del dispositivo non può essere ottenuto in modo ricorsivo. Si consideri l'esempio seguente. AVStream riceve una notifica di sospensione. Come descritto sopra, accetta il mutex del dispositivo per conto del minidriver. Se AVStream chiama quindi una routine di callback fornita da minidriver nel contesto del thread A, il minidriver non deve successivamente tentare di ottenere il mutex del dispositivo nel thread A. In questo modo, il thread A viene eseguito il deadlock con se stesso.

AVStream ottiene spesso i mutex del controllo filtro mentre il mutex del dispositivo è già mantenuto. Di conseguenza, come regola generale, un thread che ha preso un mutex del controllo filtro non deve successivamente accettare il mutex del dispositivo.

Per modificare il mutex del dispositivo, usare le funzioni seguenti:

KsAcquireDevice, KsReleaseDevice