DecodeOne.cpp e aborda um cenário de decodificação de fluxo único com um cliente.
Conexão e inicialização do hardware de áudio
A decodificação começa com o estabelecimento de uma conexão com a unidade de aceleração de hardware por meio de XApuConnect. O chamador define os requisitos da conexão usando XApuConnectInputParameters para configurar o seguinte:- O tipo de processamento (neste caso, XApuProcessType::DecodeOpus).
- O número de fluxos (neste caso, 1).
- A memória total necessária para passar e recuperar os dados de entrada e de saída; neste caso, 1024 para
MaxInputBufferLength(deve ser igual ou maior que o maior pacote Opus no fluxo). O número também deve ser múltiplo de 16, e 7680. Isso corresponde a 20 ms de dados a 48 K, ou seja, 960 × 2 × sizeof(float) = 7680 paraMaxOutputBufferLength. A saída também precisa ser múltipla de 16.
Ativação e desativação de fluxos
Depois que a conexão com o dispositivo for estabelecida, o chamador deverá enviar um comando de ativação de fluxo para acionar um único mecanismo de decodificação. O chamador deve especificar o índice do fluxo e a contagem de canais. Somente fluxos mono ou estéreo são permitidos. O chamador deve chamar XApuDequeueResult para obter o resultado da ativação. Como XApuConnectInputParameters::maxQueuedCommandsPerStream está definido como 1 neste exemplo, o chamador precisa aguardar cada resultado antes de enviar o próximo comando. Isso inclui os comandosActivate, Process e Deactivate (para obter detalhes, confira XApuCommandType).
Veja a seguir o código para ativar um fluxo.
Process, o chamador deve fazer o seguinte:
- Preencher o buffer de entrada com exatamente um pacote Opus.
- Especificar o tamanho do pacote.
- Fornecer o local do buffer de saída que será preenchido com os dados decodificados pela unidade de aceleração de hardware de áudio.
- Especificar o tamanho máximo do buffer de saída.
streamIndex e frameCount. Se for necessário copiar todos os dados decodificados para o buffer de saída, o valor frameCount poderá ser definido como qualquer valor igual ou maior que o número de quadros codificados no pacote (por exemplo, para um pacote de 20 ms, frameCount pode ser definido entre 960 e 0xFFFFFFFF).
result.outputData. Depois que eles forem processados, o próximo pacote deverá ser enviado para decodificação com uma nova chamada para XApuEnqueueCommand com o comando XApuCommandType::Process.
