Compartir a través de


Negociación de formato

Una vez que una aplicación inicia el procesamiento de audio, el generador de grafos configura los sAPOs en un grafo de audio y también inicializa los sAPOs. A continuación, el servicio de audio negocia con LFX sAPO para establecer el formato de los datos de audio en la entrada y salida del sAPO. Este proceso de negociación se conoce como negociación de formato.

Todos los sAPOs que proporcionan efectos de sistemas de audio para Windows Vista deben tener ciertas interfaces y métodos. Los métodos utilizados por sAPO y el motor de audio para negociar el formato de datos son: el método IsInputFormatSupported de la interfaz IAudioProcessingObject y los métodos LockForProcess y UnlockForProcess de la interfaz IAudioProcessingObjectConfiguration .

Para iniciar la negociación de formato, el servicio de audio establece primero la salida de LFX sAPO en el formato predeterminado basado en float32. A continuación, el servicio de audio llama al método IAudioProcessingObject::IsInputFormatSupported del SAPO de LFX, sugiere el formato predeterminado y supervisa la respuesta HRESULT de este método. Si el SAPO de LFX puede admitir el formato sugerido, devuelve S_OK, junto con una referencia al formato admitido. Si el SAPO de LFX no admite el formato sugerido, devuelve S_FALSE junto con una referencia a un formato que sea la coincidencia más cercana a la sugerida. Si el SAPO de LFX no admite el formato sugerido y no tiene una coincidencia cercana, devuelve APOERR_FORMAT_NOT_SUPPORTED. El sAPO de GFX funciona con el formato de salida de LFX sAPO. Por lo tanto, el sAPO de GFX no está implicado en el proceso de negociación de formato.

Una vez seleccionado un formato de datos para procesar los datos de audio, el generador de grafos de procesamiento de audio llama al método IAudioProcessingObjectConfiguration::LockForProcess de los sAPOs, lo que hace que se finalice la selección de formato.

Si el sAPO de Windows Vista devuelve un error al sAPO personalizado de ajuste en respuesta a una llamada al método LockForProcess , el sAPO personalizado debe controlar el error de la misma manera que controla un error de CoCreateInstance cuando se produce un error al intentar crear una instancia de un sAPO. Consulte el archivo Spkrfill.cpp para obtener más información sobre cómo sobrescribir el método LockForProcess proporcionado por el sistema.

Debido a la forma en que funciona el servicio de audio, los sAPOs LFX y GFX deben poder responder de forma independiente entre sí a las consultas del servicio de audio con respecto a los formatos de datos.

Importante Al implementar un sAPO personalizado que encapsula un sAPO de Windows Vista LFX, no especifique la marca APO_FLAG_FRAMESPERSECOND_MUST_MATCH en las propiedades de registro del sAPO personalizado. Si especificas esta marca, el sAPO de LFX de Windows Vista no podrá realizar el relleno del altavoz, la virtualización de auriculares o el entorno virtual. Además, el sAPO personalizado no podrá mezclar ninguna secuencia de audio. Por ejemplo, el sAPO personalizado no podrá mezclar una secuencia de audio 5.1 hasta una secuencia de audio estéreo de dos canales.