audio_stream_out Odniesienie do struktury
#include < audio.h >
Pola danych | |
struktura audio_stream | wspólny |
uint32_t(* | get_latency )(stała struktura audio_stream_out *stream) |
int(* | set_volume )(struct audio_stream_out *stream, pływaj w lewo, pływaj w prawo) |
rozmiar_t(* | napisz ) (struct audio_stream_out *stream, const void *buffer, size_t bajtów) |
int(* | get_render_position )(const struktura audio_stream_out *stream, uint32_t *dsp_frames) |
int(* | get_next_write_timestamp )(const struktura audio_stream_out *stream, int64_t *znacznik czasu) |
int(* | set_callback )(struct audio_stream_out *stream, stream_callback_t wywołanie zwrotne, void *cookie) |
int(* | pauza )(struktura audio_stream_out *stream) |
int(* | wznów )(struktura audio_stream_out *stream) |
int(* | dren )(struct audio_stream_out *stream, typ audio_drain_type_t ) |
int(* | opróżnij )(struktura audio_stream_out *stream) |
int(* | get_presentation_position )(const struct audio_stream_out *stream, uint64_t *frames, struct timespec *timestamp) |
szczegółowy opis
audio_stream_out to interfejs abstrakcyjny dla sprzętu wyjściowego audio.
Zawiera informacje o różnych właściwościach sterownika sprzętowego wyjścia audio.
Dokumentacja terenowa
wspólna struktura audio_stream |
Typowe metody wyjścia strumienia audio. Musi to być pierwszy element audio_stream_out , ponieważ użytkownicy tej struktury będą rzutować wskaźnik audio_stream na wskaźnik audio_stream_out w kontekstach, w których wiadomo, że audio_stream odwołuje się do audio_stream_out .
int(* drenaż)(struct audio_stream_out *stream, typ audio_drain_type_t ) |
Żąda powiadomienia w przypadku odtworzenia danych buforowanych przez sterownik/sprzęt. Jeśli funkcja set_callback() została już wywołana w celu włączenia trybu nieblokującego, funkcja dren() nie może się blokować, zamiast tego powinna szybko powrócić, a zakończenie opróżniania zostanie powiadomione poprzez wywołanie zwrotne. Jeśli funkcja set_callback() nie została wywołana, funkcja spustowa() musi zostać zablokowana do czasu zakończenia. Jeśli wpiszesz==AUDIO_DRAIN_ALL, drenaż zakończy się po odtworzeniu wszystkich wcześniej zapisanych danych. Jeśli typ==AUDIO_DRAIN_EARLY_NOTIFY, drenaż kończy się na krótko przed odtworzeniem wszystkich danych bieżącej ścieżki, aby dać frameworkowi czas na wykonanie bezprzerwowej zmiany ścieżki.
Drain musi powrócić natychmiast po wywołaniu stop() i Flush().
Implementacja tej funkcji jest obowiązkowa w przypadku odtwarzania bez obciążenia.
int(* Flush)(struct audio_stream_out *stream) |
Powiadamia sterownik audio o konieczności opróżnienia danych z kolejki. Strumień musi być już wstrzymany przed wywołaniem funkcji Flush() .
Implementacja tej funkcji jest obowiązkowa w przypadku odtwarzania bez obciążenia.
uint32_t(* get_latency)(const struktura audio_stream_out *stream) |
int(* get_next_write_timestamp)(const struktura audio_stream_out *stream, int64_t *znacznik czasu) |
int(* get_presentation_position)(const struct audio_stream_out *stream, uint64_t *frames, struct timespec *timestamp) |
Zwróć ostatnią liczbę klatek audio przedstawionych zewnętrznemu obserwatorowi. Nie obejmuje to ramek, które zostały zapisane, ale nadal są w przygotowaniu. Licznik nie jest resetowany do zera, gdy wyjście przechodzi w stan gotowości. Zwraca również wartość CLOCK_MONOTONIC według licznika prezentacji. Oczekuje się, że zwrócona liczba będzie „najnowsza”, ale nie musi to być najnowsza możliwa wartość. Jednak powiązany czas powinien odpowiadać dowolnej zwróconej liczbie. Przykład: załóżmy, że zaprezentowano ramki N+M, gdzie M jest „małą” liczbą. Wtedy dopuszczalne jest zwrócenie N zamiast N+M, a znacznik czasu powinien odpowiadać N, a nie N+M. Terminy „niedawny” i „mały” nie są zdefiniowane. Odzwierciedlają jakość wdrożenia.
Tylko wersja 3.0 i wyższa.
int(* get_render_position)(const struktura audio_stream_out *stream, uint32_t *dsp_frames) |
int(* pauza)(struct audio_stream_out *stream) |
Powiadamia sterownik audio o konieczności zatrzymania odtwarzania, jednak bufory w kolejce są zachowywane przez sprzęt. Przydatne przy wdrażaniu pauzy/wznowienia. Pustą implementację, jeśli nie jest obsługiwana, należy jednak zaimplementować dla sprzętu z nietrywialnym opóźnieniem. W stanie pauzy sprzęt audio może nadal zużywać energię. Użytkownik może rozważyć zawieszenie połączenia po upływie limitu czasu.
Implementacja tej funkcji jest obowiązkowa w przypadku odtwarzania bez obciążenia.
int(* CV)(struct audio_stream_out *stream) |
int(* set_callback)(struct audio_stream_out *stream, stream_callback_t wywołanie zwrotne, void *cookie) |
ustaw funkcję wywołania zwrotnego powiadamiającą o zakończeniu nieblokującego zapisu i drenażu. Wywołanie tej funkcji oznacza, że wszystkie przyszłe funkcje write() i drenaż() muszą nie blokować się i używać wywołania zwrotnego do sygnalizowania zakończenia.
int(* set_volume)(struct audio_stream_out *stream, pływa w lewo, pływa w prawo) |
Użyj tej metody w sytuacjach, gdy miksowanie dźwięku odbywa się sprzętowo. Ta metoda służy jako bezpośredni interfejs ze sprzętem, umożliwiając bezpośrednie ustawienie głośności w porównaniu do platformy. Ta metoda może generować wiele wyjść PCM lub kodeków przyspieszanych sprzętowo, takich jak MP3 lub AAC.
ssize_t(* zapis)(struct audio_stream_out *stream, const void *buffer, size_t bajtów) |
Zapisz bufor audio do sterownika. Zwraca liczbę zapisanych bajtów lub ujemną wartość status_t. Jeśli co najmniej jedna ramka została pomyślnie zapisana przed wystąpieniem błędu, sugeruje się, aby sterownik zwrócił liczbę pomyślnych (krótkich) bajtów, a następnie zwrócił błąd w kolejnym wywołaniu.
Jeśli funkcja set_callback() została wcześniej wywołana w celu włączenia trybu nieblokującego, funkcja write() nie może blokować. Musi zapisać tylko liczbę bajtów, która aktualnie mieści się w buforze sterownika/sprzętu, a następnie zwrócić tę liczbę bajtów. Jeśli jest on mniejszy niż żądany rozmiar zapisu, należy wywołać funkcję wywołania zwrotnego, gdy w buforze sterownika/sprzętu będzie więcej miejsca.
Dokumentacja tej struktury została wygenerowana z następującego pliku:
- hardware/libhardware/include/hardware/ audio.h