Documentation de référence sur la struct audio_stream_out
#include <
audio.h
>
Champs de données |
|
struct audio_stream | commun |
uint32_t(* | get_latency )(const struct audio_stream_out *stream) |
int(* | set_volume )(struct audio_stream_out *stream, float left, float right) |
ssize_t(* | write )(struct audio_stream_out *stream, const void *buffer, size_t bytes) |
int(* | get_render_position )(const struct audio_stream_out *stream, uint32_t *dsp_frames) |
int(* | get_next_write_timestamp )(const struct audio_stream_out *stream, int64_t *timestamp) |
int(* | set_callback )(struct audio_stream_out *stream, stream_callback_t callback, void *cookie) |
int(* | paused (struct audio_stream_out *stream) |
int(* | resume )(struct audio_stream_out *stream) |
int(* | drain )(struct audio_stream_out *stream, audio_drain_type_t type) |
int(* | flush )(struct audio_stream_out *stream) |
int(* | get_presentation_position )(const struct audio_stream_out *stream, uint64_t *frames, struct timespec *timestamp) |
Description détaillée
audio_stream_out est l'interface d'abstraction du matériel de sortie audio.
Il fournit des informations sur diverses propriétés du pilote matériel de sortie audio.
Documentation des champs
struct audio_stream common |
Méthodes courantes de diffusion du flux audio. Cet élément doit être le premier membre de audio_stream_out , car les utilisateurs de cette structure casteront un audio_stream en pointeur audio_stream_out dans les contextes où il est connu que l' audio_stream fait référence à un audio_stream_out .
int(* drain)(struct audio_stream_out *stream, audio_drain_type_t type) |
Demande une notification lorsque les données mises en mémoire tampon par le pilote/le matériel ont été lues. Si set_callback() a déjà été appelé pour activer le mode non bloquant, drain() ne doit pas se bloquer. Il doit plutôt renvoyer rapidement, et la fin du vidage est signalée via le rappel. Si set_callback() n'a pas été appelé, drain() doit se bloquer jusqu'à la fin. Si type==AUDIO_DRAIN_ALL, le vidage se termine lorsque toutes les données précédemment écrites ont été lues. Si type==AUDIO_DRAIN_EARLY_NOTIFY, le vidage se termine peu de temps avant que toutes les données du titre en cours ne soient lues pour laisser le framework effectuer un changement de titre sans coupure.
Le vidage doit renvoyer immédiatement l'appel stop() et flush() .
L'implémentation de cette fonction est obligatoire pour la lecture hors charge.
int(* flush)(struct audio_stream_out *stream) |
uint32_t(* get_latency)(const struct audio_stream_out *stream) |
int(* get_next_write_timestamp)(const struct audio_stream_out *stream, int64_t *timestamp) |
int(* get_presentation_position)(const struct audio_stream_out *stream, uint64_t *frames, struct timespec *timestamp) |
Renvoie un nombre récent de frames audio présentés à un observateur externe. Cela exclut les frames qui ont été écrits, mais qui sont toujours dans le pipeline. Le compteur n'est pas réinitialisé à zéro lorsque la sortie passe en veille. Renvoie également la valeur de CLOCK_MONOTONIC à compter de ce nombre de présentations. Le nombre renvoyé doit être "récent", mais il n'a pas besoin d'être la valeur la plus récente possible. Toutefois, l'heure associée doit correspondre au nombre renvoyé. Exemple: supposons que N + M frames aient été présentés, où M est un nombre "petit". Il est alors permis de renvoyer N au lieu de N+M, et le code temporel doit correspondre à N plutôt qu'à N+M. Les termes "récent" et "petit" ne sont pas définis. Ils reflètent la qualité de l'implémentation.
3.0 et versions ultérieures uniquement.
int(* get_render_position)(const struct audio_stream_out *stream, uint32_t *dsp_frames) |
int(* pause)(struct audio_stream_out *stream) |
Informe le pilote audio d'arrêter la lecture, mais les tampons mis en file d'attente sont conservés par le matériel. Utile pour implémenter la mise en pause/reprise. Toutefois, si elle n'est pas prise en charge, une implémentation vide doit être implémentée pour le matériel avec une latence non triviale. En état de pause, le matériel audio peut toujours consommer de l'énergie. L'utilisateur peut envisager d'appeler suspend après un délai avant expiration.
L'implémentation de cette fonction est obligatoire pour la lecture hors charge.
int(* resume)(struct audio_stream_out *stream) |
int(* set_callback)(struct audio_stream_out *stream, stream_callback_t callback, void *cookie) |
int(* set_volume)(struct audio_stream_out *stream, float left, float right) |
Utilisez cette méthode lorsque le mixage audio est effectué dans le matériel. Cette méthode sert d'interface directe avec le matériel, ce qui vous permet de définir directement le volume au lieu de le faire via le framework. Cette méthode peut produire plusieurs sorties PCM ou des codecs accélérés matériellement, tels que MP3 ou AAC.
ssize_t(* write)(struct audio_stream_out *stream, const void *buffer, size_t bytes) |
Écrire le tampon audio dans le pilote. Renvoie le nombre d'octets écrits ou un status_t négatif. Si au moins un frame a été écrit avec succès avant l'erreur, il est recommandé que le pilote renvoie ce nombre d'octets (court) réussi, puis renvoie une erreur dans l'appel suivant.
Si set_callback() a déjà été appelé pour activer le mode non bloquant, write() n'est pas autorisé à bloquer. Elle ne doit écrire que le nombre d'octets qui tiennent actuellement dans le tampon du pilote/de l'appareil, puis renvoyer ce nombre d'octets. Si cette valeur est inférieure à la taille d'écriture demandée, la fonction de rappel doit être appelée lorsqu'il y a plus d'espace disponible dans la mémoire tampon du pilote/de l'appareil.
La documentation de ce struct a été générée à partir du fichier suivant :
- hardware/libhardware/include/hardware/ audio.h