DecodeOne.cpp et couvre un scénario de décodage à flux unique avec un client.
Connexion au matériel audio et démarrage
Le décodage commence par l’établissement d’une connexion avec l’unité d’accélération matérielle au moyen de XApuConnect. L’appelant définit les exigences de la connexion à l’aide de XApuConnectInputParameters pour configurer les éléments suivants :- Le type de traitement (dans ce cas, XApuProcessType::DecodeOpus).
- Le nombre de flux (dans ce cas, 1).
- La mémoire totale requise pour transmettre et récupérer les données d’entrée et de sortie, dans ce cas 1024 pour
MaxInputBufferLength(doit être égal ou supérieur au plus gros paquet Opus du flux). Le nombre doit également être un multiple de 16, et 7680. Cela correspond à 20 ms de données à 48 K, soit 960 × 2 × sizeof(float) = 7680 pourMaxOutputBufferLength. La sortie doit également être un multiple de 16.
Activation et désactivation des flux
Une fois la connexion établie avec le périphérique, l’appelant doit envoyer une commande d’activation de flux pour engager un seul moteur de décodage. L’appelant doit indiquer l’index du flux et le nombre de canaux. Seuls les flux mono ou stéréo sont autorisés. L’appelant doit appeler XApuDequeueResult pour obtenir le résultat de l’activation. Comme XApuConnectInputParameters::maxQueuedCommandsPerStream est défini à 1 dans cet exemple, l’appelant doit attendre chaque résultat avant de soumettre la commande suivante. Cela inclut les commandesActivate, Process et Deactivate (pour plus de détails, consultez XApuCommandType).
Voici le code pour activer un flux.
Process, l’appelant doit effectuer les opérations suivantes :
- Remplir la mémoire tampon d’entrée avec exactement un paquet Opus.
- Indiquer la longueur du paquet.
- Fournir l’emplacement de la mémoire tampon de sortie qui sera remplie de données décodées par l’unité d’accélération matérielle audio.
- Indiquer la longueur maximale de la mémoire tampon de sortie.
streamIndex et frameCount. Si toutes les données décodées doivent être copiées dans la mémoire tampon de sortie, la valeur frameCount peut être définie à n’importe quelle valeur égale ou supérieure au nombre de trames encodées dans le paquet (par exemple, pour un paquet de 20 ms, frameCount peut être défini entre 960 et 0xFFFFFFFF).
result.outputData. Après leur traitement, le paquet suivant doit être soumis pour décodage au moyen d’un nouvel appel à XApuEnqueueCommand avec la commande XApuCommandType::Process.
