Analisi della topologia WDMAud
Il driver di sistema WDMAud analizza prima le linee mixer di destinazione prima di analizzare le linee del mixer di origine. L'ordine in cui WDMAud analizza le righe di destinazione è il contrario di quello in cui SysAudio individua le righe. Ad esempio, i pin numerati più alti vengono analizzati per primi. L'analisi inizia dall'elemento padre immediato del segnaposto e si sposta nella direzione a monte. Ogni nodo viene convertito in base a queste regole fino a quando il parser non rileva una delle condizioni di terminazione seguenti:
Il nodo corrente analizzato è un nodo SUM.
Il nodo corrente è un nodo MUX.
Il nodo corrente ha più elementi padre.
I nodi SUM e MUX sono i caratteri di terminazione classici della riga di destinazione. Un nodo SUM non genera controlli. Un nodo MUX genera un controllo MUX nella riga di destinazione che contiene riferimenti a ognuna delle righe di origine controllate dal MUX.
Se vengono individuati più elementi padre, l'analisi viene immediatamente terminata. Il driver della linea mixer interpreta questa condizione come una "somma virtuale" costituita dal collegamento di più input.
Il nome della riga di destinazione deriva dal nome restituito dalla proprietà KSPROPERTY_PIN_NAME sul pin.
Dopo che tutti i controlli riga di destinazione sono stati convertiti, WDMAud inizia a tradurre le righe di origine. Anche in questo caso, l'ordine in cui WDMAud analizza queste righe è il contrario dell'ordine in cui SysAudio li esegue una query. Inoltre, la direzione in cui vengono analizzate le linee di origine è opposta a quella in cui vengono analizzate le righe di destinazione. WDMAud analizza ogni riga a partire dal pin e procede nella direzione downstream fino a quando non rileva una delle condizioni di terminazione seguenti:
Il parser trova una riga di destinazione.
Il nodo corrente convertito appartiene a una riga di destinazione.
Il nodo corrente è un nodo SUM.
Il nodo corrente è un nodo MUX.
Quando si verifica un MUX durante l'analisi di una riga di origine appartenente a una riga di destinazione, viene convertita in un controllo . Tuttavia, viene usato solo come segnaposto per aggiornare i numeri di riga nel MUX archiviato nella riga di destinazione in un secondo momento. I numeri di riga finali non sono ancora disponibili a questo punto, quindi è necessario un segnaposto.
Sia un MUX che un nodo SUM terminano una riga di origine; pertanto, tutti i nodi tra SUM o MUX e un altro SUM o MUX non vengono convertiti.
Note
I nomi di riga in MUX derivano dal nome del pin per la riga, tranne quando la riga inserita in un MUX proviene da un nodo SUM o MUX. In tal caso, il nome della riga è il nome del nodo MUX o SUM. Quando il driver mixer lo rileva, crea una linea mixer virtuale con il nome del nodo SUM o MUX e quindi converte tutti i controlli tra SUM o MUX e MUX.
Una suddivisione nella topologia è un caso in cui un nodo ha più di un singolo elemento figlio. Ciò è utile quando un singolo pin indirizza a due destinazioni separate, ma condivide alcuni controlli comuni, ad esempio volume o disattivazione disattivata. Ogni volta che viene rilevata una divisione, il driver WDMAud crea una nuova riga e duplica tutti i controlli analizzati fino alla divisione. Ciò si verifica in modo incondizionato ogni volta che viene rilevata una divisione, anche dopo aver rilevato un nodo SUM che termina una riga di origine.