DecodeOne.cpp y cubre un escenario de descodificación de una sola secuencia con un cliente.
Conexión con el hardware de audio e inicio
La descodificación comienza estableciendo una conexión con la unidad de aceleración de hardware mediante XApuConnect. El autor de la llamada establece los requisitos de la conexión mediante XApuConnectInputParameters para configurar lo siguiente:- El tipo de procesamiento (en este caso, XApuProcessType::DecodeOpus).
- El número de secuencias (en este caso, 1).
- La memoria total necesaria para pasar y recuperar los datos de entrada y de salida; en este caso, 1024 para
MaxInputBufferLength(debe ser igual o mayor que el paquete Opus más grande de la secuencia). El número también debe ser múltiplo de 16, y 7680. Esto corresponde a 20 ms de datos a 48 K, es decir, 960 × 2 × sizeof(float) = 7680 paraMaxOutputBufferLength. La salida también debe ser múltiplo de 16.
Activación y desactivación de secuencias
Una vez establecida la conexión con el dispositivo, el autor de la llamada debe enviar un comando de activación de secuencia para poner en marcha un único motor de descodificación. El autor de la llamada debe especificar el índice de la secuencia y el número de canales. Solo se permiten secuencias mono o estéreo. El autor de la llamada debe llamar a XApuDequeueResult para obtener el resultado de la activación. Como XApuConnectInputParameters::maxQueuedCommandsPerStream está establecido en 1 en este ejemplo, el autor de la llamada tiene que esperar cada resultado antes de enviar el siguiente comando. Esto incluye los comandosActivate, Process y Deactivate (para obtener más detalles, consulte XApuCommandType).
A continuación se muestra el código para activar una secuencia.
Process, el autor de la llamada debe hacer lo siguiente:
- Rellenar el búfer de entrada con exactamente un paquete Opus.
- Especificar la longitud del paquete.
- Proporcionar la ubicación del búfer de salida que la unidad de aceleración de hardware de audio rellenará con los datos descodificados.
- Especificar la longitud máxima del búfer de salida.
streamIndex y frameCount. Si es necesario copiar todos los datos descodificados en el búfer de salida, el valor frameCount se puede establecer en cualquier valor igual o mayor que el número de fotogramas codificados en el paquete (por ejemplo, para un paquete de 20 ms, frameCount se puede establecer entre 960 y 0xFFFFFFFF).
result.outputData. Después de procesarlo, se debe enviar el siguiente paquete para su descodificación con una nueva llamada a XApuEnqueueCommand con el comando XApuCommandType::Process.
