Strukturreferenz für „audio_stream_out“
#include <
audio.h
>
Datenfelder |
|
struct audio_stream | common |
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(* | pause )(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) |
Detaillierte Beschreibung
audio_stream_out ist die Abstraktionsschnittstelle für die Audioausgabehardware.
Er enthält Informationen zu verschiedenen Eigenschaften des Audioausgabe-Hardwaretreibers.
Felddokumentation
struct audio_stream common |
Gängige Methoden für den Audiostream. Dies muss das erste Mitglied von audio_stream_out sein, da Nutzer dieser Struktur einen audio_stream in einen audio_stream_out -Pointer umwandeln, wenn bekannt ist, dass audio_stream auf audio_stream_out verweist.
int(* drain)(struct audio_stream_out *stream, audio_drain_type_t type) |
Erfordert eine Benachrichtigung, wenn Daten, die vom Treiber/von der Hardware gepuffert wurden, wiedergegeben wurden. Wenn set_callback() zuvor aufgerufen wurde, um den nicht blockierenden Modus zu aktivieren, darf drain() nicht blockieren, sondern sollte schnell zurückkehren. Der Abschluss des Drains wird über den Rückgabewert des Callbacks mitgeteilt. Wenn set_callback() nicht aufgerufen wurde, muss drain() bis zum Abschluss blockieren. Wenn „type“ den Wert „AUDIO_DRAIN_ALL“ hat, ist der Vorgang abgeschlossen, wenn alle zuvor geschriebenen Daten abgespielt wurden. Wenn „type“ den Wert „AUDIO_DRAIN_EARLY_NOTIFY“ hat, wird der Vorgang kurz vor dem Abspielen aller Daten für den aktuellen Titel abgeschlossen, damit das Framework Zeit für einen nahtlosen Titelwechsel hat.
Drain muss bei den Aufrufen von „stop()“ und flush() sofort zurückgeben.
Die Implementierung dieser Funktion ist für die ausgelagerte Wiedergabe obligatorisch.
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) |
Gibt die Anzahl der Audioframes zurück, die einem externen Beobachter in letzter Zeit präsentiert wurden. Ausgenommen sind Frames, die bereits geschrieben wurden, sich aber noch in der Pipeline befinden. Die Zählung wird nicht auf null zurückgesetzt, wenn die Ausgabe in den Standbymodus wechselt. Außerdem wird der Wert von CLOCK_MONOTONIC zu diesem Zeitpunkt zurückgegeben. Die zurückgegebene Anzahl sollte „aktuell“ sein, muss aber nicht der aktuellste Wert sein. Die zugehörige Zeit sollte jedoch der zurückgegebenen Anzahl entsprechen. Beispiel: Angenommen, es wurden N + M Frames präsentiert, wobei M eine „kleine“ Zahl ist. Dann ist es zulässig, N anstelle von N + M zurückzugeben. Der Zeitstempel sollte N und nicht N + M entsprechen. Die Begriffe „recent“ (aktuell) und „small“ (klein) sind nicht definiert. Sie spiegeln die Qualität der Implementierung wider.
Nur Version 3.0 und höher.
int(* get_render_position)(const struct audio_stream_out *stream, uint32_t *dsp_frames) |
int(* pause)(struct audio_stream_out *stream) |
Der Audiotreiber wird angewiesen, die Wiedergabe anzuhalten. Die gepufferten Daten werden jedoch von der Hardware beibehalten. Nützlich für die Implementierung von Pausieren/Fortsetzen. Eine leere Implementierung sollte jedoch für Hardware mit nicht unerheblicher Latenz implementiert werden, wenn sie nicht unterstützt wird. Im Pausierstatus verbraucht die Audiohardware möglicherweise weiterhin Strom. Der Nutzer kann nach einem Zeitlimit die Funktion „Sperren“ aufrufen.
Die Implementierung dieser Funktion ist für die ausgelagerte Wiedergabe obligatorisch.
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) |
Verwenden Sie diese Methode, wenn die Audiomischung in der Hardware erfolgt. Diese Methode dient als direkte Schnittstelle zur Hardware, sodass Sie die Lautstärke direkt und nicht über das Framework einstellen können. Diese Methode kann mehrere PCM-Ausgaben oder hardwarebeschleunigte Codecs wie MP3 oder AAC erzeugen.
ssize_t(* write)(struct audio_stream_out *stream, const void *buffer, size_t bytes) |
Audio-Puffer in den Treiber schreiben. Gibt die Anzahl der geschriebenen Byte oder einen negativen status_t zurück. Wenn vor dem Fehler mindestens ein Frame erfolgreich geschrieben wurde, sollte der Treiber die Anzahl der erfolgreich geschriebenen (kurzen) Bytes zurückgeben und dann im nächsten Aufruf einen Fehler zurückgeben.
Wenn set_callback() bereits aufgerufen wurde, um den nicht blockierenden Modus zu aktivieren, darf write() nicht blockieren. Es muss nur die Anzahl der Byte geschrieben werden, die derzeit in den Treiber-/Hardware-Puffer passen, und dann diese Byteanzahl zurückgeben. Wenn dies kleiner als die angeforderte Schreibgröße ist, muss die Callback-Funktion aufgerufen werden, wenn im Treiber-/Hardwarepuffer mehr Speicherplatz verfügbar ist.
Die Dokumentation für diese Struktur wurde aus der folgenden Datei generiert:
- hardware/libhardware/include/hardware/ audio.h