Partilhar via


Formatar Negociação

Depois que um aplicativo inicia o processamento de áudio, o construtor de grafos configura os sAPOs em um grafo de áudio e também inicializa os sAPOs. Em seguida, o serviço de áudio negocia com o LFX sAPO para estabelecer o formato dos dados de áudio na entrada e saída do sAPO. Esse processo de negociação é conhecido como negociação de formato.

Todos os sAPOs que fornecem efeitos de sistemas de áudio para o Windows Vista devem ter determinadas interfaces e métodos. Os métodos usados pelo sAPO e pelo mecanismo de áudio para negociar o formato de dados são: o método IsInputFormatSupported da interface IAudioProcessingObject e os métodos LockForProcess e UnlockForProcess da interface IAudioProcessingObjectConfiguration .

Para iniciar a negociação de formato, o serviço de áudio primeiro define a saída do sAPO LFX para o formato padrão baseado em float32. Em seguida, o serviço de áudio chama o método IAudioProcessingObject::IsInputFormatSupported do LFX sAPO, sugere o formato padrão e monitora a resposta HRESULT desse método. Se o LFX sAPO puder dar suporte ao formato sugerido, ele retornará S_OK, juntamente com uma referência ao formato com suporte. Se o LFX sAPO não puder dar suporte ao formato sugerido, ele retornará S_FALSE junto com uma referência a um formato que seja a correspondência mais próxima da sugerida. Se o LFX sAPO não puder dar suporte ao formato sugerido e não tiver uma correspondência próxima, ele retornará APOERR_FORMAT_NOT_SUPPORTED. O sAPO GFX funciona com o formato de saída do LFX sAPO. Portanto, o sAPO GFX não está envolvido no processo de negociação de formato.

Depois que um formato de dados é selecionado para processar os dados de áudio, o construtor de grafo de processamento de áudio chama o método IAudioProcessingObjectConfiguration::LockForProcess dos sAPOs, fazendo com que a seleção de formato seja finalizada.

Se o sAPO do Windows Vista retornar um erro ao encapsular o sAPO personalizado em resposta a uma chamada para o método LockForProcess , o sAPO personalizado deverá lidar com o erro da mesma maneira que manipula um erro de CoCreateInstance quando uma tentativa de instanciar um sAPO falhar. Consulte o arquivo Spkrfill.cpp para obter detalhes sobre como substituir o método LockForProcess fornecido pelo sistema.

Devido à maneira como o serviço de áudio opera, os sAPOs LFX e GFX devem ser capazes de responder independentemente uns dos outros às consultas do serviço de áudio em relação aos formatos de dados.

Importante Ao implementar um sAPO personalizado que encapsula um sAPO do Windows Vista LFX, não especifique o sinalizador APO_FLAG_FRAMESPERSECOND_MUST_MATCH nas propriedades de registro do sAPO personalizado. Se você especificar esse sinalizador, o sAPO do Windows Vista LFX não poderá executar preenchimento de alto-falante, virtualização de fone de ouvido ou surround virtual. Além disso, seu sAPO personalizado não poderá diminuir a combinação de fluxos de áudio. Por exemplo, seu sAPO personalizado não poderá misturar um fluxo de áudio 5.1 para um fluxo de áudio estéreo de dois canais.