Connexion au matériel et démarrage
Une connexion doit être établie avec l’unité d’accélération matérielle via XDspConnect ou XDspConnectWithMaximumStreamLimit. L’appelant définit les exigences de la connexion à l’aide des paramètres suivants :-
baseBuffer : pointeur vers la mémoire allouée par l’utilisateur, suffisante pour contenir les mémoires tampons d’entrée, de sortie, d’enveloppe et/ou de multiplicateur de bloc qui seront passées au matériel. Cette mémoire doit être allouée via XMemAlloc avec les attributs suivants : XALLOC_MEMTYPE_PHYSICAL_CACHEABLE, XALLOC_PAGESIZE_64KB, XALLOC_ALIGNMENT_64K. Ces attributs doivent être définis à l’aide de
MAKE_XALLOC_ATTRIBUTES(), comme illustré dans l’exemple ci-dessous. Cette mémoire ne doit pas être libérée tant que l’appel à XDspDisconnect n’a pas réussi. Cette mémoire tampon doit avoir une taille d’au moins 64 Ko. - baseBufferLength : longueur de baseBuffer en octets. Cette mémoire tampon doit avoir une taille d’au moins 64 Ko et d’au plus 500 Mo.
- aggregateImpulseResponseInSeconds : représente la durée totale de toutes les réponses impulsionnelles individuelles qui seront activées simultanément à l’aide de XDspActivate avec XDspProcessType::Convolution. Si cette valeur est 0, aucun flux avec XDspProcessType::Convolution ne peut être activé.
- handle : pointeur vers le XDspClientHandle destiné à contenir le handle retourné par cet appel.
Activation et désactivation des flux
Une fois la connexion établie avec l’appareil, l’appelant doit envoyer une commande d’activation de flux pour lancer une convolution, une FFT ou une IFFT. L’appelant doit spécifier dans XDspActivationParameters le XDspProcessType, le nombre de trames par bloc, le nombre de canaux, la longueur de la réponse impulsionnelle en valeurs float et un pointeur vers les données de réponse impulsionnelle dans le domaine fréquentiel. Seuls les flux mono ou stéréo sont autorisés. Pour XDspProcessType::ForwardFourierTransform et XDspProcessType::inverseFourierTransform, XDspActivationParameters::impulseResponse doit être nullptr et XDspActivationParameters::impulseResponseLengthInFloats = 0. XDspActivationOptions doit être défini de manière appropriée. Voici le code permettant d’activer un flux pour la convolution.- Remplir la mémoire tampon d’entrée avec exactement blockFrameCount de données.
- Renseigner XDspCommand avec les valeurs appropriées et des mémoires tampons d’entrée et de sortie alignées sur 16 octets.
- Appeler XDspSubmitCommand pour soumettre la commande au matériel. Cette fonction retourne un numéro de séquence de commande qui peut être utilisé pour suivre le nombre de commandes envoyées au matériel.
- Pour appliquer une enveloppe, remplir la mémoire tampon d’enveloppe avec les valeurs de gain de chaque bloc du filtre de réponse impulsionnelle, appeler XDspSubmitCommandWithEnvelope, puis continuer à effectuer cet appel avec la même mémoire tampon d’enveloppe jusqu’à ce que l’enveloppe ne soit plus nécessaire ou qu’elle doive être modifiée.
- Lorsque l’enveloppe n’est plus nécessaire, appeler XDspSubmitCommand ou XDspSubmitCommandWithEnvelope avec nullptr pour envelopeBuffer. Notez que XDspSubmitCommandWithEnvelope avec nullptr pour envelopeBuffer équivaut à XDspSubmitCommand.
- Lors du changement d’enveloppe, le envelopeBuffer actuel ne peut être mis à jour pour l’enveloppe suivante que si le matériel a traité toutes les commandes utilisant cette enveloppe et que les résultats ont été récupérés. Sinon, utilisez une autre mémoire tampon d’enveloppe.
