audio_stream_out Справочник по структуре
#include < audio.h >
Поля данных | |
структура audio_stream | общий |
uint32_t(* | get_latency )(const struct audio_stream_out *поток) |
интервал (* | set_volume )(struct audio_stream_out *поток, с плавающей запятой влево, с плавающей запятой справа) |
ssize_t(* | запись )(struct audio_stream_out *stream, const void *buffer, size_t байт) |
интервал (* | get_render_position )(const struct audio_stream_out *stream, uint32_t *dsp_frames) |
интервал (* | get_next_write_timestamp )(const struct audio_stream_out *stream, int64_t *timestamp) |
интервал (* | set_callback )(struct audio_stream_out *stream, обратный вызов stream_callback_t , void *cookie) |
интервал (* | пауза )(struct audio_stream_out *stream) |
интервал (* | возобновить )(struct audio_stream_out *stream) |
интервал (* | сток )(структура audio_stream_out *поток, тип audio_drain_type_t ) |
интервал (* | флеш )(struct audio_stream_out *stream) |
интервал (* | get_presentation_position )(const struct audio_stream_out *stream, uint64_t *frames, struct timespec *timestamp) |
Подробное описание
audio_stream_out — это интерфейс абстракции для оборудования вывода звука.
Он предоставляет информацию о различных свойствах аппаратного драйвера аудиовыхода.
Полевая документация
общая структура audio_stream |
Распространенные способы вывода аудиопотока. Это должен быть первый элемент audio_stream_out , поскольку пользователи этой структуры будут преобразовывать audio_stream в указатель audio_stream_out в контекстах, где известно, что audio_stream ссылается на audio_stream_out .
int(* сток)(структура audio_stream_out *stream, тип audio_drain_type_t ) |
Запрашивает уведомление, когда данные, буферизованные драйвером/аппаратным обеспечением, были воспроизведены. Если функция set_callback() была ранее вызвана для включения неблокирующего режима, функция стока() не должна блокироваться, вместо этого она должна быстро возвращаться, а о завершении сброса сообщается посредством обратного вызова. Если set_callback() не был вызван, функция стока() должна быть заблокирована до завершения. Если type==AUDIO_DRAIN_ALL, слив завершится, когда будут воспроизведены все ранее записанные данные. Если type==AUDIO_DRAIN_EARLY_NOTIFY, слив завершается незадолго до того, как все данные для текущей дорожки будут воспроизведены, чтобы дать платформе время выполнить непрерывное переключение дорожек.
Слив должен немедленно возвращаться при вызове stop() и flush() .
Реализация этой функции обязательна для разгруженного воспроизведения.
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) |
Возвращает недавний подсчет количества аудиокадров, представленных внешнему наблюдателю. Это исключает кадры, которые были записаны, но все еще находятся в конвейере. Счетчик не обнуляется, когда выход переходит в режим ожидания. Также возвращает значение CLOCK_MONOTONIC для этого счетчика презентаций. Ожидается, что возвращаемый счетчик будет «последним», но не обязательно должен быть самым последним возможным значением. Однако связанное время должно соответствовать любому возвращаемому счетчику. Пример: предположим, что было представлено N+M кадров, где M — «небольшое» число. Тогда допустимо возвращать N вместо N+M, и метка времени должна соответствовать N, а не N+M. Термины «недавний» и «небольшой» не определены. Они отражают качество реализации.
Только 3.0 и выше.
int(* get_render_position)(const struct audio_stream_out *stream, uint32_t *dsp_frames) |
int(* pause)(struct audio_stream_out *stream) |
Уведомляет аудиодрайвер об остановке воспроизведения, однако буферы в очереди сохраняются аппаратным обеспечением. Полезно для реализации паузы/возобновления. Однако пустая реализация, если она не поддерживается, должна быть реализована для оборудования с нетривиальной задержкой. В состоянии паузы звуковое оборудование все еще может потреблять энергию. Пользователь может рассмотреть возможность вызова приостановки после тайм-аута.
Реализация этой функции обязательна для разгруженного воспроизведения.
int(* резюме)(struct audio_stream_out *stream) |
int(* set_callback)(struct audio_stream_out *stream, обратный вызов stream_callback_t , void *cookie) |
int(* set_volume)(struct audio_stream_out *stream, float влево, float вправо) |
Используйте этот метод в ситуациях, когда микширование звука выполняется аппаратно. Этот метод служит прямым интерфейсом с оборудованием, позволяя вам напрямую устанавливать громкость, а не через фреймворк. Этот метод может создавать несколько выходных данных PCM или кодеков с аппаратным ускорением, таких как MP3 или AAC.
ssize_t(* write)(struct audio_stream_out *stream, const void *buffer, size_t байт) |
Записать звуковой буфер в драйвер. Возвращает количество записанных байтов или отрицательное значение status_t. Если хотя бы один кадр был успешно записан до возникновения ошибки, предлагается, чтобы драйвер возвращал этот успешный (короткий) счетчик байтов, а затем возвращал ошибку при последующем вызове.
Если set_callback() ранее вызывался для включения неблокирующего режима, функция write() не может блокироваться. Он должен записывать только то количество байтов, которое в настоящее время помещается в буфере драйвера/аппаратного обеспечения, а затем возвращать это количество байтов. Если это меньше запрошенного размера записи, функция обратного вызова должна быть вызвана, когда в драйвере/аппаратном буфере доступно больше места.
Документация для этой структуры была сгенерирована из следующего файла:
- оборудование/libhardware/include/оборудование/ аудио.h