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.
O Windows 10 inclui a capacidade de expressar restrições de simultaneidade usando um arquivo XML. No dispositivo com restrição de recursos, a capacidade de especificar prioridade para fluxos de áudio específicos pode melhorar a experiência do cliente.
Um desafio com a criação de uma boa experiência de áudio em um laptop ou tablet de baixo custo é que alguns dispositivos têm várias restrições de simultaneidade. Por exemplo, é possível que o dispositivo só possa reproduzir até 6 fluxos de áudio simultaneamente e suporte apenas 2 fluxos de descarregamento. Quando há uma chamada de vídeo ativa com áudio em tempo real, é possível que o dispositivo suporte apenas 2 fluxos de áudio. Quando o dispositivo está capturando áudio, o dispositivo só pode reproduzir até 4 fluxos de áudio.
O Windows 10 inclui um mecanismo para expressar restrições de simultaneidade para garantir que fluxos de áudio de alta prioridade possam ser reproduzidos. Se o sistema não tiver recursos suficientes, os fluxos de baixa prioridade serão encerrados.
O Windows 11 fornece recursos adicionais com o uso de grupos de recursos e são abordados posteriormente neste tópico em Grupos de Recursos - Gerenciamento Estendido de Recursos de Áudio.
Para especificar restrições, conclua estas duas etapas.
- Crie um arquivo XML de restrições de simultaneidade conforme descrito em Especificar restrições de simultaneidade.
- Configure uma entrada do Registro para usar o arquivo XML de restrições de simultaneidade personalizadas, conforme descrito em Configuração da Chave do Registro.
Especificar restrições de recursos de concorrência
O arquivo de restrições XML é composto por três seções. A primeira seção necessária é definida por <Limites></Limites>. Esta seção pode ser usada para definir até quinze restrições de recursos. Por exemplo, você pode definir restrições para o número máximo de fluxo de renderização e o número máximo de fluxos que podem ser descarregados.
<?xml version="1.0" encoding="utf-8"?>
<ConstraintModel>
<Limits>
<Resource>
<ID>MaxRender</ID>
<Consumption>6</Consumption>
</Resource>
<Resource>
<ID>MaxOffLoad</ID>
<Consumption>2</Consumption>
</Resource>
...
</Limits>
A próxima seção do arquivo XML define uma ou mais listas de pontos de extremidade exclusivos, com cada lista contendo dois ou mais pontos de extremidade. Estes são pontos finais que, não podem estar ativos ao mesmo tempo. Esta secção é opcional.
Por exemplo, se o hardware de áudio tiver HandsetSpeaker e WiredHeadsetSpeaker conectados ao mesmo DAC, que não podem estar ativos ao mesmo tempo, devem estar na mesma lista de ExclusiveEndpoints.
Esta seção pode ter vários <nós ExclusiveEndpoints>. Cada nó ExclusiveEndpoints contém dois ou mais nós Endpoints. Cada nó Endpoint contém HWID, TopologyName e PinId.
<ExclusiveEndpoints>
<Endpoint>
<HWID>Root\sysvad_PhoneAudioSample</HWID>
<!-- Example of h/w id specified in phoneaudiosample.inf -->
<TopologyName>TopologySpeaker</TopologyName>
<!-- Topology filter reference string-->
<PinId>1</PinId>
<!-- KSPIN_TOPO_LINEOUT_DEST -->
</Endpoint>
<Endpoint>
<!-- Example of h/w id specified in phoneaudiosample.inf -->
<HWID>Root\sysvad_PhoneAudioSample</HWID>
<!-- Topology filter reference string-->
<TopologyName>TopologyHandsetSpeaker</TopologyName>
<!-- KSPIN_TOPO_LINEOUT_DEST -->
<PinId>1</PinId>
</Endpoint>
</ExclusiveEndpoints>
A próxima seção do arquivo XML define vários consumidores de recursos. Esta seção do arquivo contém várias <entradas ResourceConsumer> . Cada entrada identifica informações sobre um consumidor de recursos e seu uso de recursos associados. Cada recurso que é usado, deve ser previamente definido na <seção Limites> .
<ResourceConsumer>
<!-- Active Phone call -->
<ConsumerInfo>
<PhoneCall>
<CallState>Active</CallState>
</PhoneCall>
</ConsumerInfo>
<Resource>
<ID>MaxRender</ID>
<Consumption>2</Consumption>
</Resource>
<Resource>
<ID>MaxOffLoad</ID>
<Consumption>2</Consumption>
</Resource>
...
</ResourceConsumer>
À medida que os recursos de áudio são usados, o serviço de áudio rastreia os recursos. Quando recursos insuficientes estão disponíveis, os fluxos de prioridade mais baixa são encerrados ou a solicitação de recurso atual falha se os consumidores de recursos existentes tiverem prioridade mais alta.
Estas são as entradas válidas de <ConsumerInfo>.
<PhoneCall> - O <nó PhoneCall> contém um nó filho chamado CallState, que pode estar "Ativo" ou "Suspenso".
<Stream> - Fluxos de áudio. O <nó Stream> contém os seguintes nós filhos.
<HWID- O ID de hardware (hw-id) do consumidor de recursos, conforme especificado no arquivo INF do driver.
<TopologyName> - A cadeia de caracteres de referência do filtro de topologia do consumidor de recursos.
<PinId> - O ID do identificador do consumidor do recurso.
<Modo> - O GUID do modo associado. Para obter mais informações, consulte Modos de processamento de sinal de áudio.
<ConnectorType> - O tipo de conector do consumidor de recurso. Os valores válidos são: Host, Loopback ou Offload.
<KeywordDetector> - Detetor de palavras-chave usado para suportar interações de voz por disparo de palavras-chave.
A tabela a seguir resume as prioridades de fluxo de áudio de renderização, listadas da prioridade mais alta para a mais baixa.
| Renderizar fluxo de áudio | Prioridade |
|---|---|
| Comunicações | 1 |
| Bate-papo do jogo | 2 |
| Leitor de tela | 3 |
| Obturador da câmara | 4 |
| Pressionar para Falar | 5 |
| Em Notificação de Chamada | 6 |
| Assistente Pessoal | 6 |
| Voz | 7 |
| Toque de chamada | 8 |
| Alarme | 9 |
| Filme | 10 |
| Mídia somente em primeiro plano | 10 |
| Mídia com capacidade para operar em segundo plano | 11 |
| MÍDIA | 11 |
| Efeitos sonoros | 12 |
| DTMF | 12 |
| Mídia do jogo | 12 |
| Sistema | 12 |
| Efeitos do jogo | 12 |
| Outros | 13 |
| Alertas | 14 |
A tabela a seguir resume as prioridades de fluxo de áudio de captura, listadas da prioridade mais alta para a mais baixa.
| Capturar fluxo de áudio | Prioridade |
|---|---|
| Comunicações | 1 |
| Bate-papo do jogo | 2 |
| Pressionar para Falar | 4 |
| Assistente Pessoal | 6 |
| Voz | 7 |
| Mídia com capacidade para operar em segundo plano | 8 |
| MÍDIA | 8 |
| Outros | 13 |
| Mídia do jogo | 15 |
| Leitor de tela | 15 |
| Alertas | 15 |
| Mídia somente em primeiro plano | 15 |
| Efeitos do jogo | 15 |
| Efeitos sonoros | 15 |
| DTMF | 15 |
| Em Notificação de Chamada | 15 |
| Alarme | 15 |
| Obturador da câmara | 15 |
| Filme | 15 |
| Toque de chamada | 15 |
| Sistema | 15 |
Exemplos
Exemplo 1: O usuário está falando pelo Skype, usando fluxos de Renderização e Captura de Comunicações. Eles iniciam um jogo, que tenta criar um fluxo de efeitos de jogo. Se não houver recursos suficientes disponíveis, a criação do fluxo de efeitos de jogo falhará.
Exemplo 2: O utilizador está a reproduzir música. Eles iniciam um aplicativo que cria um fluxo de fala. Se não houver recursos suficientes disponíveis, o fluxo de música será encerrado e a criação do fluxo de discurso será bem-sucedida.
Opção de wildcard para TopologyName
Uma opção de wildcard está disponível para uso com a tag TopologyName. Este recurso pode ser usado para suportar o comportamento dinâmico associado ao Bluetooth de banda lateral. Esta opção permite que o driver de áudio crie um novo conjunto de interfaces para cada periférico bluetooth emparelhado que corresponda a um padrão específico. Isso evita que as configurações do usuário para diferentes periféricos de áudio sejam misturadas.
Para fazer isso, é recomendável adicionar o ID de hardware periférico à cadeia de caracteres de referência da interface de áudio. Isso pode ser feito usando um hash do link simbólico para o periférico. O código de exemplo do driver de áudio Sysvad inclui implementações de exemplo para banda lateral HFP, banda lateral A2DP e banda lateral USB. As funções de exemplo são chamadas "CreateFilterNames". Esta função faz o hash do link simbólico e combina-o com os nomes dos filtros, para gerar nomes de filtros únicos para cada periférico.
As definições XML do recurso fazem parte do pacote de driver e as IDs de hardware são desconhecidas no momento em que são criadas.
Para dar suporte a essa correspondência dinâmica, uma opção curinga de asterisco '*' é fornecida para o último caractere na declaração XML do nome de topologia do recurso.
Exemplo de nome de topologia coringa
Por exemplo, a cadeia de referência de interface real poderia ser "BTHFPCapture-00AABBCCDD" e a entrada correspondente no XML do recurso seria <TopologyName>BTHFPCapture-*</TopologyName>.
Todos os pontos de extremidade criados pelo driver seguindo o padrão "BTHFPCapture-*" usariam a mesma definição de recurso.
Grupos de recursos - Gerenciamento estendido de recursos de áudio
Os grupos de recursos estão disponíveis a partir do Windows 11. Os grupos de recursos permitem que pontos de extremidade sejam atribuídos a diferentes grupos de recursos predefinidos em XML. Os grupos de recursos permitem que recursos de áudio, como fluxos, sejam alocados de acordo com limites definidos.
Antes de os fluxos serem criados, o gerenciador de recursos de hardware de áudio determina qual grupo de recursos usar e notifica o driver do grupo atribuído. Quando o gerenciador de recursos de hardware de áudio deteta um conflito, a renderização de fluxo de prioridade mais alta para o ponto de extremidade de prioridade mais alta (o padrão atual) recebe o grupo de recursos preferencial e os fluxos de prioridade mais baixa receberão o próximo grupo de recursos disponível. Este processo é repetido até que não haja mais fluxos ou mais recursos. Quando os recursos estiverem esgotados, a criação do(s) fluxo(s) de prioridade mais baixa retornará uma falha indicando que há recursos insuficientes.
Quando o grupo de recursos é atribuído, o ponto de extremidade de áudio é notificado do grupo de recursos atribuído. O XML do recurso declara quais grupos de recursos são aplicáveis ao ponto de extremidade, em ordem de prioridade/preferência, e o ponto de extremidade pode ser movido entre os grupos de recursos suportados conforme necessário para atender às necessidades gerais de recursos do sistema.
Sem grupos de recursos, em versões anteriores ao Windows 11, o sistema de gerenciamento de recursos assume que os recursos de hardware são limitados, mas esses recursos podem ser movidos livremente pelos pontos de extremidade de áudio (DSP MIPS). Por exemplo, o sistema pode criar até três fluxos de descarga, um fluxo de comunicações e um fluxo de fala de cada vez, em qualquer combinação de pontos finais de áudio. Quando os recursos são declarados e usados, todos eles vêm de um único pool. Isso pode ser pensado como ter um único grupo de recursos partilhado por todos os terminais de áudio. Como havia apenas um grupo de recursos, não havia necessidade de notificar o driver sobre qual grupo estava em uso.
Exemplo de cenário de grupo de recursos
Por exemplo, se um driver tiver dois pontos de extremidade de áudio e dois caminhos separados para renderizar áudio, um através de um DSP e outro sem o DSP. Escolhido com antecedência, qualquer caminho pode ser usado para qualquer ponto de extremidade, mas o ponto de extremidade atribuído para usar o DSP tem uso exclusivo do DSP e todo o áudio para o ponto de extremidade deve passar pelo dsp. ou seja, não há mistura de áudio entre esses dois caminhos.
O DSP teria restrições de recursos e capacidades diferentes do ponto de extremidade sem o DSP. Trocar os recursos entre os dois pontos finais exigiria a interrupção de todo o áudio em ambos os pontos finais, o hardware seria reatribuído e, depois, o áudio poderia ser retomado. Como a escolha sobre usar ou não o DSP precisaria ser feita antes que quaisquer fluxos fossem criados no ponto de extremidade, a decisão precisa ser tomada fora do driver. No caso de um conflito, duas aplicações que desejam a mesma funcionalidade DSP ao mesmo tempo, os grupos de recursos são utilizados para decidir qual ponto de extremidade obtém qual recurso.
Cada grupo de recursos é criado com seu próprio conjunto de recursos, mas também pode, opcionalmente, usar os recursos compartilhados globalmente. Por exemplo, o DSPGroup pode ser definido para permitir dois fluxos de descarregamento e um fluxo de fala do host, enquanto o NoDSPGroup permite apenas um fluxo de descarregamento e nenhum fluxo de fala do host. Esta definição permitiria que até três fluxos de descarga estivessem ativos ao mesmo tempo. Pode também existir uma limitação máxima a nível do sistema de até dois fluxos de offload em simultâneo, partilhados entre DSPGroup e NoDSPGroup.
Quando um fluxo é criado, ele será atribuído a DSPGroup ou NoDSPGroup com base no tipo de fluxo que está sendo criado e na prioridade do fluxo e do ponto de extremidade. Se o fluxo criado for descarregado, ele será atribuído ao DSPGroup; caso contrário, ele poderá ser atribuído ao DSPGroup ou ao NoDSPGroup.
Enquanto um ponto de extremidade é atribuído a um grupo, todos os fluxos nesse ponto de extremidade são limitados aos recursos de fluxo associados ao grupo. Por exemplo, no máximo dois fluxos de descarregamento disponíveis quando um ponto de extremidade é atribuído ao DSPGroup.
Pode-se determinar que um endpoint deve mover-se de um grupo para outro, devido à prioridade dos fluxos. Por exemplo, se o primeiro fluxo de descarregamento foi criado em um ponto de extremidade de alto-falante e um novo fluxo de descarregamento está sendo criado no ponto de extremidade do fone de ouvido, e há apenas um conjunto de recursos DSPGroup disponível, o recurso DSPGroup precisará ser realocado do ponto de extremidade do alto-falante para o ponto de extremidade do fone de ouvido. Para fazer isso, todos os fluxos de alto-falante DSPGroup serão invalidados. DSPGroup seria então alocado para o endpoint do fone de ouvido e o stream de offload criado. Após a invalidação, o fluxo recriado pelos aplicativos invalidados descobrirá que a transferência de carga não está mais disponível, porque têm prioridade inferior ao utilizador da transferência de carga do ponto final do auricular existente. NoDSPGroup será atribuído ao ponto de extremidade do alto-falante, e os fluxos serão limitados às restrições de recursos do ponto final do alto-falante, máximo de seis fluxos de host possíveis no sistema, por exemplo.
O exemplo descrito é simplificado. O sistema permite qualquer número de grupos compartilhados em qualquer número de endpoints. Por exemplo, pode haver três pontos de extremidade, compartilhando dois DSPs capazes e um DSP limitado, ou cinco pontos de extremidade compartilhando dois DSPs e três caminhos de software.
Exemplo de XML do Grupo de Recursos
Este segmento XML de exemplo define dois grupos de recursos, DSPGroup e NoDSPGroup.
<Limits>
<Resource>
<ID>DataBus</ID>
<Consumption>8</Consumption>
</Resource>
<ResourceGroup Name="DSPGroup">
<Consumption>1</Consumption>
<Resource>
<ID>MaxOffload</ID>
<Consumption>3</Consumption>
</Resource>
<Resource>
<ID>DspMaxLoopback</ID>
<Consumption>1</Consumption>
</Resource>
</ResourceGroup>
<ResourceGroup Name="NoDSPGroup">
<Consumption>2</Consumption>
<Resource>
<ID>MaxHost</ID>
<Consumption>2</Consumption>
</Resource>
<Resource>
<ID>MaxLoopback</ID>
<Consumption>1</Consumption>
</Resource>
</ResourceGroup>
</Limits>
Comportamento de alocação de grupo de recursos
No arranque, os recursos globais existentes serão alocados do gestor de recursos externos. Em seguida, cada grupo de recursos terá um recurso alocado com o gerenciador de recursos externo, com a contagem igual às instâncias máximas desse grupo.
Em tempo de execução, cada ponto de extremidade será associado a apenas um grupo de recursos.
Os fluxos nesse ponto de extremidade só terão acesso aos recursos dentro do grupo de recursos associado.
Os recursos do pool compartilhado global original também podem ser usados.
Quando o primeiro fluxo é criado num ponto de extremidade, será adquirida a restrição necessária de recursos do ponto de extremidade. Quando o último fluxo for fechado no endpoint, a restrição será liberada.
Quando um ponto de extremidade recebe um grupo de recursos, ele precisa ser notificado sobre o grupo de recursos atribuído.
O grupo de recursos atribuído dependerá da prioridade dos requisitos do grupo de recursos para os fluxos atualmente ativos e da disponibilidade.
Quando a restrição de recursos do ponto de extremidade é adquirida, os fluxos no ponto de extremidade são limitados aos recursos de fluxo global e aos recursos de fluxo dentro do grupo de recursos adquirido. Eles não podem adquirir um recurso disponível em um grupo diferente.
Os recursos que fazem parte do grupo de recursos são usados apenas pelo ponto de extremidade que está atualmente atribuído ao grupo de recursos.
Opcionalmente, os grupos de recursos podem conter recursos adicionais específicos do grupo. Um recurso será alocado do gerenciador de recursos externo para cada recurso vezes a contagem máxima de instâncias para o grupo de recursos.
Quando a atribuição do grupo de recursos é alterada, todos os fluxos no ponto de extremidade são encerrados antes da alteração.
Para que um ponto de extremidade seja movido de um grupo de recursos para outro, todos os fluxos que contêm recursos do outro grupo precisam ser invalidados e, após a criação do fluxo, todos os novos recursos serão adquiridos provenientes do novo grupo de recursos.
Configuração da Chave de Registo
O caminho completo para o arquivo XML de restrições de simultaneidade precisa ser especificado na seguinte chave do Registro.
HKR\SYSTEM\MultiMedia\DeviceCapability\ResourceSettings\XMLConfig
O caminho é relativo à instalação do driver. Na instalação do driver INF, o arquivo XML de restrição precisa ser copiado e a seguinte linha seria adicionada para registrá-lo no sistema:
HKR,SYSTEM\MultiMedia\DeviceCapability\ResourceSettings\XMLConfig,<Name of the constraint>,,<Path to the constraint>
Nessa chave do Registro, forneça um valor que contenha o caminho para o XML. Recomenda-se que o nome do arquivo XML e o nome do valor da chave de regkey sejam exclusivos, pois há potencial para outros subsistemas/dispositivos de áudio fornecerem seu próprio conjunto de restrições em arquivos XML. A regkey pode ser definida no ficheiro INF do driver de áudio.
Exemplo de arquivo de restrições XML
Este é um exemplo de arquivo de restrições XML do exemplo de driver de áudio virtual SYSVAD.
<?xml version="1.0" encoding="utf-8"?>
<ConstraintModel>
<Limits>
<Resource>
<ID>MaxThreeRender</ID>
<Consumption>3</Consumption>
</Resource>
<Resource>
<ID>MaxTwoOffload</ID>
<Consumption>2</Consumption>
</Resource>
<Resource>
<ID>MaxTwoCapture</ID>
<Consumption>2</Consumption>
</Resource>
<Resource>
<ID>MaxOneLoopback</ID>
<Consumption>1</Consumption>
</Resource>
<Resource>
<ID>MaxOneRawStreamInPhoneCall</ID>
<Consumption>27</Consumption>
</Resource>
</Limits>
<ExclusiveEndpoints>
<Endpoint>
<!-- Example of h/w id specified in phoneaudiosample.inf -->
<HWID>Root\sysvad_PhoneAudioSample</HWID>
<!-- Topology filter reference string-->
<TopologyName>TopologySpeaker</TopologyName>
<!-- KSPIN_TOPO_LINEOUT_DEST -->
<PinId>1</PinId>
</Endpoint>
<Endpoint>
<!-- Example of h/w id specified in phoneaudiosample.inf -->
<HWID>Root\sysvad_PhoneAudioSample</HWID>
<!-- Topology filter reference string-->
<TopologyName>TopologyHandsetS*</TopologyName>
<!-- KSPIN_TOPO_LINEOUT_DEST -->
<PinId>1</PinId>
</Endpoint>
</ExclusiveEndpoints>
<ExclusiveEndpoints>
<Endpoint>
<!-- Example of h/w id specified in phoneaudiosample.inf -->
<HWID>Root\sysvad_PhoneAudioSample</HWID>
<!-- Topology filter reference string-->
<TopologyName>TopologyMicArray1</TopologyName>
<!-- KSPIN_TOPO_MIC_ELEMENTS -->
<PinId>0</PinId>
</Endpoint>
<Endpoint>
<!-- Example of h/w id specified in phoneaudiosample.inf -->
<HWID>Root\sysvad_PhoneAudioSample</HWID>
<!-- Topology filter reference string-->
<TopologyName>TopologyHandsetM*</TopologyName>
<!-- KSPIN_TOPO_MIC_ELEMENTS -->
<PinId>0</PinId>
</Endpoint>
</ExclusiveEndpoints>
<ResourceConsumer>
<!-- Phone call -->
<ConsumerInfo>
<PhoneCall>
<CallState>Active</CallState>
</PhoneCall>
</ConsumerInfo>
<Resource>
<ID>MaxTwoOffload</ID>
<Consumption>2</Consumption>
</Resource>
<Resource>
<ID>MaxOneLoopback</ID>
<Consumption>1</Consumption>
</Resource>
<Resource>
<ID>MaxOneRawStreamInPhoneCall</ID>
<Consumption>26</Consumption>
</Resource>
</ResourceConsumer>
<ResourceConsumer>
<!-- Keyword Detector -->
<ConsumerInfo>
<KeywordDetector />
</ConsumerInfo>
<Resource>
<ID>MaxTwoCapture</ID>
<Consumption>2</Consumption>
</Resource>
<!-- Don't include MaxOneRawStreamInPhoneCall
so we can validate Capture stream causing
KD release then PhoneCall releasing Capture
and letting KD acquire -->
</ResourceConsumer>
<ResourceConsumer>
<!-- AudioStream to speaker, default mode, host -->
<ConsumerInfo>
<Stream>
<HWID>Root\sysvad_PhoneAudioSample</HWID>
<!-- Example of h/w id specified in phoneaudiosample.inf -->
<TopologyName>TopologySpeaker</TopologyName>
<!-- Topology filter reference string-->
<PinId>1</PinId>
<!-- KSPIN_TOPO_LINEOUT_DEST -->
<Mode>{C18E2F7E-933D-4965-B7D1-1EEF228D2AF3}</Mode>
<!--Signal processing mode default-->
<ConnectorType>Host</ConnectorType>
</Stream>
</ConsumerInfo>
<Resource>
<ID>MaxThreeRender</ID>
<Consumption>1</Consumption>
</Resource>
<Resource>
<ID>MaxOneRawStreamInPhoneCall</ID>
<Consumption>2</Consumption>
</Resource>
</ResourceConsumer>
<ResourceConsumer>
<!-- AudioStream to speaker, Communications mode, host -->
<ConsumerInfo>
<Stream>
<HWID>Root\sysvad_PhoneAudioSample</HWID>
<!-- Example of h/w id specified in phoneaudiosample.inf -->
<TopologyName>TopologySpeaker</TopologyName>
<!-- Topology filter reference string-->
<PinId>1</PinId>
<!-- KSPIN_TOPO_LINEOUT_DEST -->
<Mode>{98951333-B9CD-48B1-A0A3-FF40682D73F7}</Mode>
<!--Signal processing mode Communications-->
<ConnectorType>Host</ConnectorType>
</Stream>
</ConsumerInfo>
<Resource>
<ID>MaxThreeRender</ID>
<Consumption>1</Consumption>
</Resource>
<Resource>
<ID>MaxOneRawStreamInPhoneCall</ID>
<Consumption>2</Consumption>
</Resource>
</ResourceConsumer>
<ResourceConsumer>
<!-- AudioStream to speaker, Speech mode, host -->
<ConsumerInfo>
<Stream>
<HWID>Root\sysvad_PhoneAudioSample</HWID>
<!-- Example of h/w id specified in phoneaudiosample.inf -->
<TopologyName>TopologySpeaker</TopologyName>
<!-- Topology filter reference string-->
<PinId>1</PinId>
<!-- KSPIN_TOPO_LINEOUT_DEST -->
<Mode>{FC1CFC9B-B9D6-4CFA-B5E0-4BB2166878B2}</Mode>
<!--Signal processing mode Speech-->
<ConnectorType>Host</ConnectorType>
</Stream>
</ConsumerInfo>
<Resource>
<ID>MaxThreeRender</ID>
<Consumption>1</Consumption>
</Resource>
<Resource>
<ID>MaxOneRawStreamInPhoneCall</ID>
<Consumption>2</Consumption>
</Resource>
</ResourceConsumer>
<ResourceConsumer>
<!-- AudioStream to speaker, Notification mode, host -->
<ConsumerInfo>
<Stream>
<HWID>Root\sysvad_PhoneAudioSample</HWID>
<!-- Example of h/w id specified in phoneaudiosample.inf -->
<TopologyName>TopologySpeaker</TopologyName>
<!-- Topology filter reference string-->
<PinId>1</PinId>
<!-- KSPIN_TOPO_LINEOUT_DEST -->
<Mode>{9CF2A70B-F377-403B-BD6B-360863E0355C}</Mode>
<!--Signal processing mode Notification-->
<ConnectorType>Host</ConnectorType>
</Stream>
</ConsumerInfo>
<Resource>
<ID>MaxThreeRender</ID>
<Consumption>1</Consumption>
</Resource>
<Resource>
<ID>MaxOneRawStreamInPhoneCall</ID>
<Consumption>2</Consumption>
</Resource>
</ResourceConsumer>
<ResourceConsumer>
<!-- AudioStream to speaker, Media mode, host -->
<ConsumerInfo>
<Stream>
<HWID>Root\sysvad_PhoneAudioSample</HWID>
<!-- Example of h/w id specified in phoneaudiosample.inf -->
<TopologyName>TopologySpeaker</TopologyName>
<!-- Topology filter reference string-->
<PinId>1</PinId>
<!-- KSPIN_TOPO_LINEOUT_DEST -->
<Mode>{4780004E-7133-41D8-8C74-660DADD2C0EE}</Mode>
<!--Signal processing mode Media-->
<ConnectorType>Host</ConnectorType>
</Stream>
</ConsumerInfo>
<Resource>
<ID>MaxThreeRender</ID>
<Consumption>1</Consumption>
</Resource>
<Resource>
<ID>MaxOneRawStreamInPhoneCall</ID>
<Consumption>2</Consumption>
</Resource>
</ResourceConsumer>
<ResourceConsumer>
<!-- AudioStream to speaker, Movie mode, host -->
<ConsumerInfo>
<Stream>
<HWID>Root\sysvad_PhoneAudioSample</HWID>
<!-- Example of h/w id specified in phoneaudiosample.inf -->
<TopologyName>TopologySpeaker</TopologyName>
<!-- Topology filter reference string-->
<PinId>1</PinId>
<!-- KSPIN_TOPO_LINEOUT_DEST -->
<Mode>{B26FEB0D-EC94-477C-9494-D1AB8E753F6E}</Mode>
<!--Signal processing mode Movie-->
<ConnectorType>Host</ConnectorType>
</Stream>
</ConsumerInfo>
<Resource>
<ID>MaxThreeRender</ID>
<Consumption>1</Consumption>
</Resource>
<Resource>
<ID>MaxOneRawStreamInPhoneCall</ID>
<Consumption>2</Consumption>
</Resource>
</ResourceConsumer>
<ResourceConsumer>
<!-- AudioStream to speaker, raw mode, host -->
<ConsumerInfo>
<Stream>
<HWID>Root\sysvad_PhoneAudioSample</HWID>
<!-- Example of h/w id specified in phoneaudiosample.inf -->
<TopologyName>TopologySpeaker</TopologyName>
<!-- Topology filter reference string-->
<PinId>1</PinId>
<!-- KSPIN_TOPO_LINEOUT_DEST -->
<Mode>{9E90EA20-B493-4FD1-A1A8-7E1361A956CF}</Mode>
<!--Signal processing mode raw-->
<ConnectorType>Host</ConnectorType>
</Stream>
</ConsumerInfo>
<Resource>
<ID>MaxThreeRender</ID>
<Consumption>1</Consumption>
</Resource>
<Resource>
<ID>MaxOneRawStreamInPhoneCall</ID>
<Consumption>1</Consumption>
</Resource>
</ResourceConsumer>
<ResourceConsumer>
<!-- AudioStream to speaker, default mode, offload -->
<ConsumerInfo>
<Stream>
<HWID>Root\sysvad_PhoneAudioSample</HWID>
<!-- Example of h/w id specified in phoneaudiosample.inf -->
<TopologyName>TopologySpeaker</TopologyName>
<!-- Topology filter reference string-->
<PinId>1</PinId>
<!-- KSPIN_TOPO_LINEOUT_DEST -->
<Mode>{C18E2F7E-933D-4965-B7D1-1EEF228D2AF3}</Mode>
<!--Signal processing mode default-->
<ConnectorType>Offload</ConnectorType>
<!-- Offload -->
</Stream>
</ConsumerInfo>
<Resource>
<ID>MaxThreeRender</ID>
<Consumption>1</Consumption>
</Resource>
<Resource>
<ID>MaxTwoOffload</ID>
<Consumption>1</Consumption>
</Resource>
<Resource>
<ID>MaxOneRawStreamInPhoneCall</ID>
<Consumption>2</Consumption>
</Resource>
</ResourceConsumer>
<ResourceConsumer>
<!-- AudioStream to speaker, Media mode, Offload -->
<ConsumerInfo>
<Stream>
<HWID>Root\sysvad_PhoneAudioSample</HWID>
<!-- Example of h/w id specified in phoneaudiosample.inf -->
<TopologyName>TopologySpeaker</TopologyName>
<!-- Topology filter reference string-->
<PinId>1</PinId>
<!-- KSPIN_TOPO_LINEOUT_DEST -->
<Mode>{4780004E-7133-41D8-8C74-660DADD2C0EE}</Mode>
<!--Signal processing mode Media-->
<ConnectorType>Offload</ConnectorType>
</Stream>
</ConsumerInfo>
<Resource>
<ID>MaxThreeRender</ID>
<Consumption>1</Consumption>
</Resource>
<Resource>
<ID>MaxTwoOffload</ID>
<Consumption>1</Consumption>
</Resource>
<Resource>
<ID>MaxOneRawStreamInPhoneCall</ID>
<Consumption>2</Consumption>
</Resource>
</ResourceConsumer>
<ResourceConsumer>
<!-- AudioStream to speaker, Movie mode, offload -->
<ConsumerInfo>
<Stream>
<HWID>Root\sysvad_PhoneAudioSample</HWID>
<!-- Example of h/w id specified in phoneaudiosample.inf -->
<TopologyName>TopologySpeaker</TopologyName>
<!-- Topology filter reference string-->
<PinId>1</PinId>
<!-- KSPIN_TOPO_LINEOUT_DEST -->
<Mode>{B26FEB0D-EC94-477C-9494-D1AB8E753F6E}</Mode>
<!--Signal processing mode Movie-->
<ConnectorType>Offload</ConnectorType>
</Stream>
</ConsumerInfo>
<Resource>
<ID>MaxThreeRender</ID>
<Consumption>1</Consumption>
</Resource>
<Resource>
<ID>MaxTwoOffload</ID>
<Consumption>1</Consumption>
</Resource>
<Resource>
<ID>MaxOneRawStreamInPhoneCall</ID>
<Consumption>2</Consumption>
</Resource>
</ResourceConsumer>
<ResourceConsumer>
<!-- AudioStream to speaker, default mode, loopback -->
<ConsumerInfo>
<Stream>
<HWID>Root\sysvad_PhoneAudioSample</HWID>
<!-- Example of h/w id specified in phoneaudiosample.inf -->
<TopologyName>TopologySpeaker</TopologyName>
<!-- Topology filter reference string-->
<PinId>1</PinId>
<!-- KSPIN_TOPO_LINEOUT_DEST -->
<Mode>{C18E2F7E-933D-4965-B7D1-1EEF228D2AF3}</Mode>
<!--Signal processing mode default-->
<ConnectorType>Loopback</ConnectorType>
<!-- Loopback -->
</Stream>
</ConsumerInfo>
<Resource>
<ID>MaxThreeRender</ID>
<Consumption>1</Consumption>
</Resource>
<Resource>
<ID>MaxOneLoopback</ID>
<Consumption>1</Consumption>
</Resource>
<Resource>
<ID>MaxOneRawStreamInPhoneCall</ID>
<Consumption>2</Consumption>
</Resource>
</ResourceConsumer>
<ResourceConsumer>
<!-- AudioStream to wired headset, default mode, host -->
<ConsumerInfo>
<Stream>
<!-- Example of h/w id specified in phoneaudiosample.inf -->
<HWID>Root\sysvad_PhoneAudioSample</HWID>
<!-- Topology filter reference string-->
<TopologyName>TopologySpeakerHeadset</TopologyName>
<!-- KSPIN_TOPO_LINEOUT_DEST -->
<PinId>1</PinId>
<!--Signal processing mode default-->
<Mode>{C18E2F7E-933D-4965-B7D1-1EEF228D2AF3}</Mode>
<ConnectorType>Host</ConnectorType>
</Stream>
</ConsumerInfo>
<Resource>
<ID>MaxThreeRender</ID>
<Consumption>1</Consumption>
</Resource>
<Resource>
<ID>MaxOneRawStreamInPhoneCall</ID>
<Consumption>2</Consumption>
</Resource>
</ResourceConsumer>
<ResourceConsumer>
<!-- AudioStream to wired headset, Communications mode, host -->
<ConsumerInfo>
<Stream>
<HWID>Root\sysvad_PhoneAudioSample</HWID>
<!-- Example of h/w id specified in phoneaudiosample.inf -->
<TopologyName>TopologySpeakerHeadset</TopologyName>
<!-- Topology filter reference string-->
<PinId>1</PinId>
<!-- KSPIN_TOPO_LINEOUT_DEST -->
<Mode>{98951333-B9CD-48B1-A0A3-FF40682D73F7}</Mode>
<!--Signal processing mode Communications-->
<ConnectorType>Host</ConnectorType>
</Stream>
</ConsumerInfo>
<Resource>
<ID>MaxThreeRender</ID>
<Consumption>1</Consumption>
</Resource>
<Resource>
<ID>MaxOneRawStreamInPhoneCall</ID>
<Consumption>2</Consumption>
</Resource>
</ResourceConsumer>
<ResourceConsumer>
<!-- AudioStream to wired headset, Speech mode, host -->
<ConsumerInfo>
<Stream>
<HWID>Root\sysvad_PhoneAudioSample</HWID>
<!-- Example of h/w id specified in phoneaudiosample.inf -->
<TopologyName>TopologySpeakerHeadset</TopologyName>
<!-- Topology filter reference string-->
<PinId>1</PinId>
<!-- KSPIN_TOPO_LINEOUT_DEST -->
<Mode>{FC1CFC9B-B9D6-4CFA-B5E0-4BB2166878B2}</Mode>
<!--Signal processing mode Speech-->
<ConnectorType>Host</ConnectorType>
</Stream>
</ConsumerInfo>
<Resource>
<ID>MaxThreeRender</ID>
<Consumption>1</Consumption>
</Resource>
<Resource>
<ID>MaxOneRawStreamInPhoneCall</ID>
<Consumption>2</Consumption>
</Resource>
</ResourceConsumer>
<ResourceConsumer>
<!-- AudioStream to wired headset, Notification mode, host -->
<ConsumerInfo>
<Stream>
<HWID>Root\sysvad_PhoneAudioSample</HWID>
<!-- Example of h/w id specified in phoneaudiosample.inf -->
<TopologyName>TopologySpeakerHeadset</TopologyName>
<!-- Topology filter reference string-->
<PinId>1</PinId>
<!-- KSPIN_TOPO_LINEOUT_DEST -->
<Mode>{9CF2A70B-F377-403B-BD6B-360863E0355C}</Mode>
<!--Signal processing mode Notification-->
<ConnectorType>Host</ConnectorType>
</Stream>
</ConsumerInfo>
<Resource>
<ID>MaxThreeRender</ID>
<Consumption>1</Consumption>
</Resource>
<Resource>
<ID>MaxOneRawStreamInPhoneCall</ID>
<Consumption>2</Consumption>
</Resource>
</ResourceConsumer>
<ResourceConsumer>
<!-- AudioStream to wired headset, Media mode, host -->
<ConsumerInfo>
<Stream>
<HWID>Root\sysvad_PhoneAudioSample</HWID>
<!-- Example of h/w id specified in phoneaudiosample.inf -->
<TopologyName>TopologySpeakerHeadset</TopologyName>
<!-- Topology filter reference string-->
<PinId>1</PinId>
<!-- KSPIN_TOPO_LINEOUT_DEST -->
<Mode>{4780004E-7133-41D8-8C74-660DADD2C0EE}</Mode>
<!--Signal processing mode Media-->
<ConnectorType>Host</ConnectorType>
</Stream>
</ConsumerInfo>
<Resource>
<ID>MaxThreeRender</ID>
<Consumption>1</Consumption>
</Resource>
<Resource>
<ID>MaxOneRawStreamInPhoneCall</ID>
<Consumption>2</Consumption>
</Resource>
</ResourceConsumer>
<ResourceConsumer>
<!-- AudioStream to wired headset, Movie mode, host -->
<ConsumerInfo>
<Stream>
<HWID>Root\sysvad_PhoneAudioSample</HWID>
<!-- Example of h/w id specified in phoneaudiosample.inf -->
<TopologyName>TopologySpeakerHeadset</TopologyName>
<!-- Topology filter reference string-->
<PinId>1</PinId>
<!-- KSPIN_TOPO_LINEOUT_DEST -->
<Mode>{B26FEB0D-EC94-477C-9494-D1AB8E753F6E}</Mode>
<!--Signal processing mode Movie-->
<ConnectorType>Host</ConnectorType>
</Stream>
</ConsumerInfo>
<Resource>
<ID>MaxThreeRender</ID>
<Consumption>1</Consumption>
</Resource>
<Resource>
<ID>MaxOneRawStreamInPhoneCall</ID>
<Consumption>2</Consumption>
</Resource>
</ResourceConsumer>
<ResourceConsumer>
<!-- AudioStream to wired headset, raw mode, host -->
<ConsumerInfo>
<Stream>
<!-- Example of h/w id specified in phoneaudiosample.inf -->
<HWID>Root\sysvad_PhoneAudioSample</HWID>
<!-- Topology filter reference string-->
<TopologyName>TopologySpeakerHeadset</TopologyName>
<!-- KSPIN_TOPO_LINEOUT_DEST -->
<PinId>1</PinId>
<!--Signal processing mode raw-->
<Mode>{9E90EA20-B493-4FD1-A1A8-7E1361A956CF}</Mode>
<ConnectorType>Host</ConnectorType>
</Stream>
</ConsumerInfo>
<Resource>
<ID>MaxThreeRender</ID>
<Consumption>1</Consumption>
</Resource>
<Resource>
<ID>MaxOneRawStreamInPhoneCall</ID>
<Consumption>1</Consumption>
</Resource>
</ResourceConsumer>
<ResourceConsumer>
<!-- AudioStream to wired headset, default mode, offload -->
<ConsumerInfo>
<Stream>
<!-- Example of h/w id specified in phoneaudiosample.inf -->
<HWID>Root\sysvad_PhoneAudioSample</HWID>
<!-- Topology filter reference string-->
<TopologyName>TopologySpeakerHeadset</TopologyName>
<!-- KSPIN_TOPO_LINEOUT_DEST -->
<PinId>1</PinId>
<!--Signal processing mode default-->
<Mode>{C18E2F7E-933D-4965-B7D1-1EEF228D2AF3}</Mode>
<!-- Offload -->
<ConnectorType>Offload</ConnectorType>
</Stream>
</ConsumerInfo>
<Resource>
<ID>MaxThreeRender</ID>
<Consumption>1</Consumption>
</Resource>
<Resource>
<ID>MaxTwoOffload</ID>
<Consumption>1</Consumption>
</Resource>
<Resource>
<ID>MaxOneRawStreamInPhoneCall</ID>
<Consumption>2</Consumption>
</Resource>
</ResourceConsumer>
<ResourceConsumer>
<!-- AudioStream to wired headset, Media mode, Offload -->
<ConsumerInfo>
<Stream>
<HWID>Root\sysvad_PhoneAudioSample</HWID>
<!-- Example of h/w id specified in phoneaudiosample.inf -->
<TopologyName>TopologySpeakerHeadset</TopologyName>
<!-- Topology filter reference string-->
<PinId>1</PinId>
<!-- KSPIN_TOPO_LINEOUT_DEST -->
<Mode>{4780004E-7133-41D8-8C74-660DADD2C0EE}</Mode>
<!--Signal processing mode Media-->
<ConnectorType>Offload</ConnectorType>
</Stream>
</ConsumerInfo>
<Resource>
<ID>MaxThreeRender</ID>
<Consumption>1</Consumption>
</Resource>
<Resource>
<ID>MaxTwoOffload</ID>
<Consumption>1</Consumption>
</Resource>
<Resource>
<ID>MaxOneRawStreamInPhoneCall</ID>
<Consumption>2</Consumption>
</Resource>
</ResourceConsumer>
<ResourceConsumer>
<!-- AudioStream to wired headset, Movie mode, offload -->
<ConsumerInfo>
<Stream>
<HWID>Root\sysvad_PhoneAudioSample</HWID>
<!-- Example of h/w id specified in phoneaudiosample.inf -->
<TopologyName>TopologySpeakerHeadset</TopologyName>
<!-- Topology filter reference string-->
<PinId>1</PinId>
<!-- KSPIN_TOPO_LINEOUT_DEST -->
<Mode>{B26FEB0D-EC94-477C-9494-D1AB8E753F6E}</Mode>
<!--Signal processing mode Movie-->
<ConnectorType>Offload</ConnectorType>
</Stream>
</ConsumerInfo>
<Resource>
<ID>MaxThreeRender</ID>
<Consumption>1</Consumption>
</Resource>
<Resource>
<ID>MaxTwoOffload</ID>
<Consumption>1</Consumption>
</Resource>
<Resource>
<ID>MaxOneRawStreamInPhoneCall</ID>
<Consumption>2</Consumption>
</Resource>
</ResourceConsumer>
<ResourceConsumer>
<!-- AudioStream to wired headset, default mode, loopback -->
<ConsumerInfo>
<Stream>
<!-- Example of h/w id specified in phoneaudiosample.inf -->
<HWID>Root\sysvad_PhoneAudioSample</HWID>
<!-- Topology filter reference string-->
<TopologyName>TopologySpeakerHeadset</TopologyName>
<!-- KSPIN_TOPO_LINEOUT_DEST -->
<PinId>1</PinId>
<!--Signal processing mode default-->
<Mode>{C18E2F7E-933D-4965-B7D1-1EEF228D2AF3}</Mode>
<!-- Loopback -->
<ConnectorType>Loopback</ConnectorType>
</Stream>
</ConsumerInfo>
<Resource>
<ID>MaxThreeRender</ID>
<Consumption>1</Consumption>
</Resource>
<Resource>
<ID>MaxOneLoopback</ID>
<Consumption>1</Consumption>
</Resource>
<Resource>
<ID>MaxOneRawStreamInPhoneCall</ID>
<Consumption>2</Consumption>
</Resource>
</ResourceConsumer>
<ResourceConsumer>
<!-- AudioStream to BT speaker, raw mode, host -->
<ConsumerInfo>
<Stream>
<!-- Example of h/w id specified in phoneaudiosample.inf -->
<HWID>Root\sysvad_PhoneAudioSample</HWID>
<!-- Topology filter reference string-->
<TopologyName>TopologyBthHfpSpeaker</TopologyName>
<!-- KSPIN_TOPO_LINEOUT_DEST -->
<PinId>1</PinId>
<!--Signal processing mode raw-->
<Mode>{9E90EA20-B493-4FD1-A1A8-7E1361A956CF}</Mode>
<ConnectorType>Host</ConnectorType>
</Stream>
</ConsumerInfo>
<Resource>
<ID>MaxThreeRender</ID>
<Consumption>1</Consumption>
</Resource>
<Resource>
<ID>MaxOneRawStreamInPhoneCall</ID>
<Consumption>1</Consumption>
</Resource>
</ResourceConsumer>
<ResourceConsumer>
<!-- AudioStream to BT speaker, raw mode, offload -->
<ConsumerInfo>
<Stream>
<!-- Example of h/w id specified in phoneaudiosample.inf -->
<HWID>Root\sysvad_PhoneAudioSample</HWID>
<!-- Topology filter reference string-->
<TopologyName>TopologyBthHfpSpeaker</TopologyName>
<!-- KSPIN_TOPO_LINEOUT_DEST -->
<PinId>1</PinId>
<!--Signal processing mode raw-->
<Mode>{9E90EA20-B493-4FD1-A1A8-7E1361A956CF}</Mode>
<!-- Offload -->
<ConnectorType>Offload</ConnectorType>
</Stream>
</ConsumerInfo>
<Resource>
<ID>MaxThreeRender</ID>
<Consumption>1</Consumption>
</Resource>
<Resource>
<ID>MaxTwoOffload</ID>
<Consumption>1</Consumption>
</Resource>
<Resource>
<ID>MaxOneRawStreamInPhoneCall</ID>
<Consumption>1</Consumption>
</Resource>
</ResourceConsumer>
<ResourceConsumer>
<!-- AudioStream to BT speaker, default mode, loopback -->
<ConsumerInfo>
<Stream>
<!-- Example of h/w id specified in phoneaudiosample.inf -->
<HWID>Root\sysvad_PhoneAudioSample</HWID>
<!-- Topology filter reference string-->
<TopologyName>TopologyBthHfpSpeaker</TopologyName>
<!-- KSPIN_TOPO_LINEOUT_DEST -->
<PinId>1</PinId>
<!--Signal processing mode default-->
<Mode>{C18E2F7E-933D-4965-B7D1-1EEF228D2AF3}</Mode>
<!-- Loopback -->
<ConnectorType>Loopback</ConnectorType>
</Stream>
</ConsumerInfo>
<Resource>
<ID>MaxThreeRender</ID>
<Consumption>1</Consumption>
</Resource>
<Resource>
<ID>MaxOneLoopback</ID>
<Consumption>1</Consumption>
</Resource>
<Resource>
<ID>MaxOneRawStreamInPhoneCall</ID>
<Consumption>2</Consumption>
</Resource>
</ResourceConsumer>
<ResourceConsumer>
<!-- AudioStream to handset speaker, default mode, host -->
<ConsumerInfo>
<Stream>
<!-- Example of h/w id specified in phoneaudiosample.inf -->
<HWID>Root\sysvad_PhoneAudioSample</HWID>
<!-- Topology filter reference string-->
<TopologyName>TopologyHandsetS*</TopologyName>
<!-- KSPIN_TOPO_LINEOUT_DEST -->
<PinId>1</PinId>
<!--Signal processing mode default-->
<Mode>{C18E2F7E-933D-4965-B7D1-1EEF228D2AF3}</Mode>
<ConnectorType>Host</ConnectorType>
</Stream>
</ConsumerInfo>
<Resource>
<ID>MaxThreeRender</ID>
<Consumption>1</Consumption>
</Resource>
<Resource>
<ID>MaxOneRawStreamInPhoneCall</ID>
<Consumption>2</Consumption>
</Resource>
</ResourceConsumer>
<ResourceConsumer>
<!-- AudioStream to handset speaker, Communications mode, host -->
<ConsumerInfo>
<Stream>
<HWID>Root\sysvad_PhoneAudioSample</HWID>
<!-- Example of h/w id specified in phoneaudiosample.inf -->
<TopologyName>TopologyHandsetS*</TopologyName>
<!-- Topology filter reference string-->
<PinId>1</PinId>
<!-- KSPIN_TOPO_LINEOUT_DEST -->
<Mode>{98951333-B9CD-48B1-A0A3-FF40682D73F7}</Mode>
<!--Signal processing mode Communications-->
<ConnectorType>Host</ConnectorType>
</Stream>
</ConsumerInfo>
<Resource>
<ID>MaxThreeRender</ID>
<Consumption>1</Consumption>
</Resource>
<Resource>
<ID>MaxOneRawStreamInPhoneCall</ID>
<Consumption>2</Consumption>
</Resource>
</ResourceConsumer>
<ResourceConsumer>
<!-- AudioStream to handset speaker, raw mode, host -->
<ConsumerInfo>
<Stream>
<!-- Example of h/w id specified in phoneaudiosample.inf -->
<HWID>Root\sysvad_PhoneAudioSample</HWID>
<!-- Topology filter reference string-->
<TopologyName>TopologyHandsetS*</TopologyName>
<!-- KSPIN_TOPO_LINEOUT_DEST -->
<PinId>1</PinId>
<!--Signal processing mode raw-->
<Mode>{9E90EA20-B493-4FD1-A1A8-7E1361A956CF}</Mode>
<ConnectorType>Host</ConnectorType>
</Stream>
</ConsumerInfo>
<Resource>
<ID>MaxThreeRender</ID>
<Consumption>1</Consumption>
</Resource>
<Resource>
<ID>MaxOneRawStreamInPhoneCall</ID>
<Consumption>1</Consumption>
</Resource>
</ResourceConsumer>
<ResourceConsumer>
<!-- AudioStream to handset speaker, default mode, loopback -->
<ConsumerInfo>
<Stream>
<!-- Example of h/w id specified in phoneaudiosample.inf -->
<HWID>Root\sysvad_PhoneAudioSample</HWID>
<!-- Topology filter reference string-->
<TopologyName>TopologyHandsetS*</TopologyName>
<!-- KSPIN_TOPO_LINEOUT_DEST -->
<PinId>1</PinId>
<!--Signal processing mode default-->
<Mode>{C18E2F7E-933D-4965-B7D1-1EEF228D2AF3}</Mode>
<!-- Loopback -->
<ConnectorType>Loopback</ConnectorType>
</Stream>
</ConsumerInfo>
<Resource>
<ID>MaxThreeRender</ID>
<Consumption>1</Consumption>
</Resource>
<Resource>
<ID>MaxOneLoopback</ID>
<Consumption>1</Consumption>
</Resource>
<Resource>
<ID>MaxOneRawStreamInPhoneCall</ID>
<Consumption>2</Consumption>
</Resource>
</ResourceConsumer>
<ResourceConsumer>
<!-- AudioStream from mic, default mode, host -->
<ConsumerInfo>
<Stream>
<!-- Example of h/w id specified in phoneaudiosample.inf -->
<HWID>Root\sysvad_PhoneAudioSample</HWID>
<!-- Topology filter reference string-->
<TopologyName>TopologyMicIn</TopologyName>
<!-- KSPIN_TOPO_MIC_ELEMENTS -->
<PinId>0</PinId>
<!--Signal processing mode default-->
<Mode>{C18E2F7E-933D-4965-B7D1-1EEF228D2AF3}</Mode>
<ConnectorType>Host</ConnectorType>
</Stream>
</ConsumerInfo>
<Resource>
<ID>MaxTwoCapture</ID>
<Consumption>1</Consumption>
</Resource>
<Resource>
<ID>MaxOneRawStreamInPhoneCall</ID>
<Consumption>2</Consumption>
</Resource>
</ResourceConsumer>
<ResourceConsumer>
<!-- AudioStream from mic, communications mode, host -->
<ConsumerInfo>
<Stream>
<!-- Example of h/w id specified in phoneaudiosample.inf -->
<HWID>Root\sysvad_PhoneAudioSample</HWID>
<!-- Topology filter reference string-->
<TopologyName>TopologyMicIn</TopologyName>
<!-- KSPIN_TOPO_MIC_ELEMENTS -->
<PinId>0</PinId>
<!--Signal processing mode communications-->
<Mode>{98951333-B9CD-48B1-A0A3-FF40682D73F7}</Mode>
<ConnectorType>Host</ConnectorType>
</Stream>
</ConsumerInfo>
<Resource>
<ID>MaxTwoCapture</ID>
<Consumption>1</Consumption>
</Resource>
<Resource>
<ID>MaxOneRawStreamInPhoneCall</ID>
<Consumption>2</Consumption>
</Resource>
</ResourceConsumer>
<ResourceConsumer>
<!-- AudioStream from mic, speech mode, host -->
<ConsumerInfo>
<Stream>
<!-- Example of h/w id specified in phoneaudiosample.inf -->
<HWID>Root\sysvad_PhoneAudioSample</HWID>
<!-- Topology filter reference string-->
<TopologyName>TopologyMicIn</TopologyName>
<!-- KSPIN_TOPO_MIC_ELEMENTS -->
<PinId>0</PinId>
<!--Signal processing mode speech-->
<Mode>{FC1CFC9B-B9D6-4CFA-B5E0-4BB2166878B2}</Mode>
<ConnectorType>Host</ConnectorType>
</Stream>
</ConsumerInfo>
<Resource>
<ID>MaxTwoCapture</ID>
<Consumption>1</Consumption>
</Resource>
<Resource>
<ID>MaxOneRawStreamInPhoneCall</ID>
<Consumption>2</Consumption>
</Resource>
</ResourceConsumer>
<ResourceConsumer>
<!-- AudioStream from mic, notification mode, host -->
<ConsumerInfo>
<Stream>
<!-- Example of h/w id specified in phoneaudiosample.inf -->
<HWID>Root\sysvad_PhoneAudioSample</HWID>
<!-- Topology filter reference string-->
<TopologyName>TopologyMicIn</TopologyName>
<!-- KSPIN_TOPO_MIC_ELEMENTS -->
<PinId>0</PinId>
<!--Signal processing mode notification-->
<Mode>{9CF2A70B-F377-403B-BD6B-360863E0355C}</Mode>
<ConnectorType>Host</ConnectorType>
</Stream>
</ConsumerInfo>
<Resource>
<ID>MaxTwoCapture</ID>
<Consumption>1</Consumption>
</Resource>
<Resource>
<ID>MaxOneRawStreamInPhoneCall</ID>
<Consumption>2</Consumption>
</Resource>
</ResourceConsumer>
<ResourceConsumer>
<!-- AudioStream from mic, raw mode, host -->
<ConsumerInfo>
<Stream>
<!-- Example of h/w id specified in phoneaudiosample.inf -->
<HWID>Root\sysvad_PhoneAudioSample</HWID>
<!-- Topology filter reference string-->
<TopologyName>TopologyMicIn</TopologyName>
<!-- KSPIN_TOPO_MIC_ELEMENTS -->
<PinId>0</PinId>
<!--Signal processing mode raw-->
<Mode>{9E90EA20-B493-4FD1-A1A8-7E1361A956CF}</Mode>
<ConnectorType>Host</ConnectorType>
</Stream>
</ConsumerInfo>
<Resource>
<ID>MaxTwoCapture</ID>
<Consumption>1</Consumption>
</Resource>
<Resource>
<ID>MaxOneRawStreamInPhoneCall</ID>
<Consumption>1</Consumption>
</Resource>
</ResourceConsumer>
<ResourceConsumer>
<!-- AudioStream from wired headset mic, default mode, host -->
<ConsumerInfo>
<Stream>
<!-- Example of h/w id specified in phoneaudiosample.inf -->
<HWID>Root\sysvad_PhoneAudioSample</HWID>
<!-- Topology filter reference string-->
<TopologyName>TopologyMicHeadset</TopologyName>
<!-- KSPIN_TOPO_MIC_ELEMENTS -->
<PinId>0</PinId>
<!--Signal processing mode default-->
<Mode>{C18E2F7E-933D-4965-B7D1-1EEF228D2AF3}</Mode>
<ConnectorType>Host</ConnectorType>
</Stream>
</ConsumerInfo>
<Resource>
<ID>MaxTwoCapture</ID>
<Consumption>1</Consumption>
</Resource>
<Resource>
<ID>MaxOneRawStreamInPhoneCall</ID>
<Consumption>2</Consumption>
</Resource>
</ResourceConsumer>
<ResourceConsumer>
<!-- AudioStream from wired headset mic, communications mode, host -->
<ConsumerInfo>
<Stream>
<!-- Example of h/w id specified in phoneaudiosample.inf -->
<HWID>Root\sysvad_PhoneAudioSample</HWID>
<!-- Topology filter reference string-->
<TopologyName>TopologyMicHeadset</TopologyName>
<!-- KSPIN_TOPO_MIC_ELEMENTS -->
<PinId>0</PinId>
<!--Signal processing mode communications-->
<Mode>{98951333-B9CD-48B1-A0A3-FF40682D73F7}</Mode>
<ConnectorType>Host</ConnectorType>
</Stream>
</ConsumerInfo>
<Resource>
<ID>MaxTwoCapture</ID>
<Consumption>1</Consumption>
</Resource>
<Resource>
<ID>MaxOneRawStreamInPhoneCall</ID>
<Consumption>2</Consumption>
</Resource>
</ResourceConsumer>
<ResourceConsumer>
<!-- AudioStream from wired headset mic, speech mode, host -->
<ConsumerInfo>
<Stream>
<!-- Example of h/w id specified in phoneaudiosample.inf -->
<HWID>Root\sysvad_PhoneAudioSample</HWID>
<!-- Topology filter reference string-->
<TopologyName>TopologyMicHeadset</TopologyName>
<!-- KSPIN_TOPO_MIC_ELEMENTS -->
<PinId>0</PinId>
<!--Signal processing mode speech-->
<Mode>{FC1CFC9B-B9D6-4CFA-B5E0-4BB2166878B2}</Mode>
<ConnectorType>Host</ConnectorType>
</Stream>
</ConsumerInfo>
<Resource>
<ID>MaxTwoCapture</ID>
<Consumption>1</Consumption>
</Resource>
<Resource>
<ID>MaxOneRawStreamInPhoneCall</ID>
<Consumption>2</Consumption>
</Resource>
</ResourceConsumer>
<ResourceConsumer>
<!-- AudioStream from wired headset mic, notification mode, host -->
<ConsumerInfo>
<Stream>
<!-- Example of h/w id specified in phoneaudiosample.inf -->
<HWID>Root\sysvad_PhoneAudioSample</HWID>
<!-- Topology filter reference string-->
<TopologyName>TopologyMicHeadset</TopologyName>
<!-- KSPIN_TOPO_MIC_ELEMENTS -->
<PinId>0</PinId>
<!--Signal processing mode notification-->
<Mode>{9CF2A70B-F377-403B-BD6B-360863E0355C}</Mode>
<ConnectorType>Host</ConnectorType>
</Stream>
</ConsumerInfo>
<Resource>
<ID>MaxTwoCapture</ID>
<Consumption>1</Consumption>
</Resource>
<Resource>
<ID>MaxOneRawStreamInPhoneCall</ID>
<Consumption>2</Consumption>
</Resource>
</ResourceConsumer>
<ResourceConsumer>
<!-- AudioStream from wired headset mic, raw mode, host -->
<ConsumerInfo>
<Stream>
<!-- Example of h/w id specified in phoneaudiosample.inf -->
<HWID>Root\sysvad_PhoneAudioSample</HWID>
<!-- Topology filter reference string-->
<TopologyName>TopologyMicHeadset</TopologyName>
<!-- KSPIN_TOPO_MIC_ELEMENTS -->
<PinId>0</PinId>
<!--Signal processing mode raw-->
<Mode>{9E90EA20-B493-4FD1-A1A8-7E1361A956CF}</Mode>
<ConnectorType>Host</ConnectorType>
</Stream>
</ConsumerInfo>
<Resource>
<ID>MaxTwoCapture</ID>
<Consumption>1</Consumption>
</Resource>
<Resource>
<ID>MaxOneRawStreamInPhoneCall</ID>
<Consumption>1</Consumption>
</Resource>
</ResourceConsumer>
<ResourceConsumer>
<!-- AudioStream from mic array, default mode, host -->
<ConsumerInfo>
<Stream>
<!-- Example of h/w id specified in phoneaudiosample.inf -->
<HWID>Root\sysvad_PhoneAudioSample</HWID>
<!-- Topology filter reference string-->
<TopologyName>TopologyMicArray1</TopologyName>
<!-- KSPIN_TOPO_MIC_ELEMENTS -->
<PinId>0</PinId>
<!--Signal processing mode default-->
<Mode>{C18E2F7E-933D-4965-B7D1-1EEF228D2AF3}</Mode>
<ConnectorType>Host</ConnectorType>
</Stream>
</ConsumerInfo>
<Resource>
<ID>MaxTwoCapture</ID>
<Consumption>1</Consumption>
</Resource>
<Resource>
<ID>MaxOneRawStreamInPhoneCall</ID>
<Consumption>2</Consumption>
</Resource>
</ResourceConsumer>
<ResourceConsumer>
<!-- AudioStream from mic array, communications mode, host -->
<ConsumerInfo>
<Stream>
<!-- Example of h/w id specified in phoneaudiosample.inf -->
<HWID>Root\sysvad_PhoneAudioSample</HWID>
<!-- Topology filter reference string-->
<TopologyName>TopologyMicArray1</TopologyName>
<!-- KSPIN_TOPO_MIC_ELEMENTS -->
<PinId>0</PinId>
<!--Signal processing mode communications-->
<Mode>{98951333-B9CD-48B1-A0A3-FF40682D73F7}</Mode>
<ConnectorType>Host</ConnectorType>
</Stream>
</ConsumerInfo>
<Resource>
<ID>MaxTwoCapture</ID>
<Consumption>1</Consumption>
</Resource>
<Resource>
<ID>MaxOneRawStreamInPhoneCall</ID>
<Consumption>2</Consumption>
</Resource>
</ResourceConsumer>
<ResourceConsumer>
<!-- AudioStream from mic array, speech mode, host -->
<ConsumerInfo>
<Stream>
<!-- Example of h/w id specified in phoneaudiosample.inf -->
<HWID>Root\sysvad_PhoneAudioSample</HWID>
<!-- Topology filter reference string-->
<TopologyName>TopologyMicArray1</TopologyName>
<!-- KSPIN_TOPO_MIC_ELEMENTS -->
<PinId>0</PinId>
<!--Signal processing mode speech-->
<Mode>{FC1CFC9B-B9D6-4CFA-B5E0-4BB2166878B2}</Mode>
<ConnectorType>Host</ConnectorType>
</Stream>
</ConsumerInfo>
<Resource>
<ID>MaxTwoCapture</ID>
<Consumption>1</Consumption>
</Resource>
<Resource>
<ID>MaxOneRawStreamInPhoneCall</ID>
<Consumption>2</Consumption>
</Resource>
</ResourceConsumer>
<ResourceConsumer>
<!-- AudioStream from mic array, notification mode, host -->
<ConsumerInfo>
<Stream>
<!-- Example of h/w id specified in phoneaudiosample.inf -->
<HWID>Root\sysvad_PhoneAudioSample</HWID>
<!-- Topology filter reference string-->
<TopologyName>TopologyMicArray1</TopologyName>
<!-- KSPIN_TOPO_MIC_ELEMENTS -->
<PinId>0</PinId>
<!--Signal processing mode notification-->
<Mode>{9CF2A70B-F377-403B-BD6B-360863E0355C}</Mode>
<ConnectorType>Host</ConnectorType>
</Stream>
</ConsumerInfo>
<Resource>
<ID>MaxTwoCapture</ID>
<Consumption>1</Consumption>
</Resource>
<Resource>
<ID>MaxOneRawStreamInPhoneCall</ID>
<Consumption>2</Consumption>
</Resource>
</ResourceConsumer>
<ResourceConsumer>
<!-- AudioStream from mic array, raw mode, host -->
<ConsumerInfo>
<Stream>
<!-- Example of h/w id specified in phoneaudiosample.inf -->
<HWID>Root\sysvad_PhoneAudioSample</HWID>
<!-- Topology filter reference string-->
<TopologyName>TopologyMicArray1</TopologyName>
<!-- KSPIN_TOPO_MIC_ELEMENTS -->
<PinId>0</PinId>
<!--Signal processing mode raw-->
<Mode>{9E90EA20-B493-4FD1-A1A8-7E1361A956CF}</Mode>
<ConnectorType>Host</ConnectorType>
</Stream>
</ConsumerInfo>
<Resource>
<ID>MaxTwoCapture</ID>
<Consumption>1</Consumption>
</Resource>
<Resource>
<ID>MaxOneRawStreamInPhoneCall</ID>
<Consumption>1</Consumption>
</Resource>
</ResourceConsumer>
<ResourceConsumer>
<!-- AudioStream from BT mic, default mode, host -->
<ConsumerInfo>
<Stream>
<!-- Example of h/w id specified in phoneaudiosample.inf -->
<HWID>Root\sysvad_PhoneAudioSample</HWID>
<!-- Topology filter reference string-->
<TopologyName>TopologyBthHfpMic</TopologyName>
<!-- KSPIN_TOPO_MIC_ELEMENTS -->
<PinId>0</PinId>
<!--Signal processing mode default-->
<Mode>{C18E2F7E-933D-4965-B7D1-1EEF228D2AF3}</Mode>
<ConnectorType>Host</ConnectorType>
</Stream>
</ConsumerInfo>
<Resource>
<ID>MaxTwoCapture</ID>
<Consumption>1</Consumption>
</Resource>
<Resource>
<ID>MaxOneRawStreamInPhoneCall</ID>
<Consumption>2</Consumption>
</Resource>
</ResourceConsumer>
<ResourceConsumer>
<!-- AudioStream from BT mic, raw mode, host -->
<ConsumerInfo>
<Stream>
<!-- Example of h/w id specified in phoneaudiosample.inf -->
<HWID>Root\sysvad_PhoneAudioSample</HWID>
<!-- Topology filter reference string-->
<TopologyName>TopologyBthHfpMic</TopologyName>
<!-- KSPIN_TOPO_MIC_ELEMENTS -->
<PinId>0</PinId>
<!--Signal processing mode raw-->
<Mode>{9E90EA20-B493-4FD1-A1A8-7E1361A956CF}</Mode>
<ConnectorType>Host</ConnectorType>
</Stream>
</ConsumerInfo>
<Resource>
<ID>MaxTwoCapture</ID>
<Consumption>1</Consumption>
</Resource>
<Resource>
<ID>MaxOneRawStreamInPhoneCall</ID>
<Consumption>1</Consumption>
</Resource>
</ResourceConsumer>
<ResourceConsumer>
<!-- AudioStream from handset mic, default mode, host -->
<ConsumerInfo>
<Stream>
<!-- Example of h/w id specified in phoneaudiosample.inf -->
<HWID>Root\sysvad_PhoneAudioSample</HWID>
<!-- Topology filter reference string-->
<TopologyName>TopologyHandsetM*</TopologyName>
<!-- KSPIN_TOPO_MIC_ELEMENTS -->
<PinId>0</PinId>
<!--Signal processing mode default-->
<Mode>{C18E2F7E-933D-4965-B7D1-1EEF228D2AF3}</Mode>
<ConnectorType>Host</ConnectorType>
</Stream>
</ConsumerInfo>
<Resource>
<ID>MaxTwoCapture</ID>
<Consumption>1</Consumption>
</Resource>
<Resource>
<ID>MaxOneRawStreamInPhoneCall</ID>
<Consumption>2</Consumption>
</Resource>
</ResourceConsumer>
<ResourceConsumer>
<!-- AudioStream from handset mic, communications mode, host -->
<ConsumerInfo>
<Stream>
<!-- Example of h/w id specified in phoneaudiosample.inf -->
<HWID>Root\sysvad_PhoneAudioSample</HWID>
<!-- Topology filter reference string-->
<TopologyName>TopologyHandsetM*</TopologyName>
<!-- KSPIN_TOPO_MIC_ELEMENTS -->
<PinId>0</PinId>
<!--Signal processing mode communications-->
<Mode>{98951333-B9CD-48B1-A0A3-FF40682D73F7}</Mode>
<ConnectorType>Host</ConnectorType>
</Stream>
</ConsumerInfo>
<Resource>
<ID>MaxTwoCapture</ID>
<Consumption>1</Consumption>
</Resource>
<Resource>
<ID>MaxOneRawStreamInPhoneCall</ID>
<Consumption>2</Consumption>
</Resource>
</ResourceConsumer>
<ResourceConsumer>
<!-- AudioStream from handset mic, speech mode, host -->
<ConsumerInfo>
<Stream>
<!-- Example of h/w id specified in phoneaudiosample.inf -->
<HWID>Root\sysvad_PhoneAudioSample</HWID>
<!-- Topology filter reference string-->
<TopologyName>TopologyHandsetM*</TopologyName>
<!-- KSPIN_TOPO_MIC_ELEMENTS -->
<PinId>0</PinId>
<!--Signal processing mode speech-->
<Mode>{FC1CFC9B-B9D6-4CFA-B5E0-4BB2166878B2}</Mode>
<ConnectorType>Host</ConnectorType>
</Stream>
</ConsumerInfo>
<Resource>
<ID>MaxTwoCapture</ID>
<Consumption>1</Consumption>
</Resource>
<Resource>
<ID>MaxOneRawStreamInPhoneCall</ID>
<Consumption>2</Consumption>
</Resource>
</ResourceConsumer>
<ResourceConsumer>
<!-- AudioStream from handset mic, notification mode, host -->
<ConsumerInfo>
<Stream>
<!-- Example of h/w id specified in phoneaudiosample.inf -->
<HWID>Root\sysvad_PhoneAudioSample</HWID>
<!-- Topology filter reference string-->
<TopologyName>TopologyHandsetM*</TopologyName>
<!-- KSPIN_TOPO_MIC_ELEMENTS -->
<PinId>0</PinId>
<!--Signal processing mode notification-->
<Mode>{9CF2A70B-F377-403B-BD6B-360863E0355C}</Mode>
<ConnectorType>Host</ConnectorType>
</Stream>
</ConsumerInfo>
<Resource>
<ID>MaxTwoCapture</ID>
<Consumption>1</Consumption>
</Resource>
<Resource>
<ID>MaxOneRawStreamInPhoneCall</ID>
<Consumption>2</Consumption>
</Resource>
</ResourceConsumer>
<ResourceConsumer>
<!-- AudioStream from handset mic, raw mode, host -->
<ConsumerInfo>
<Stream>
<!-- Example of h/w id specified in phoneaudiosample.inf -->
<HWID>Root\sysvad_PhoneAudioSample</HWID>
<!-- Topology filter reference string-->
<TopologyName>TopologyHandsetM*</TopologyName>
<!-- KSPIN_TOPO_MIC_ELEMENTS -->
<PinId>0</PinId>
<!--Signal processing mode raw-->
<Mode>{9E90EA20-B493-4FD1-A1A8-7E1361A956CF}</Mode>
<ConnectorType>Host</ConnectorType>
</Stream>
</ConsumerInfo>
<Resource>
<ID>MaxTwoCapture</ID>
<Consumption>1</Consumption>
</Resource>
<Resource>
<ID>MaxOneRawStreamInPhoneCall</ID>
<Consumption>1</Consumption>
</Resource>
</ResourceConsumer>
</ConstraintModel>