Referência da estrutura audio_stream_out
#include <
audio.h
>
Campos de dados |
|
struct audio_stream | comum |
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) |
Descrição detalhada
audio_stream_out é a interface de abstração para o hardware de saída de áudio.
Ele fornece informações sobre várias propriedades do driver de hardware de saída de áudio.
Documentação do campo
struct audio_stream common |
Métodos comuns de saída de stream de áudio. Ele precisa ser o primeiro membro de audio_stream_out porque os usuários dessa estrutura vão transmitir um audio_stream para o ponteiro audio_stream_out em contextos em que se sabe que o audio_stream faz referência a um audio_stream_out .
int(* drain)(struct audio_stream_out *stream, audio_drain_type_t type) |
Solicita uma notificação quando os dados armazenados em buffer pelo driver/hardware são reproduzidos. Se set_callback() tiver sido chamado anteriormente para ativar o modo não de bloqueio, o drain() não poderá ser bloqueado. Em vez disso, ele precisa retornar rapidamente, e a conclusão do drain precisa ser notificada pelo callback. Se set_callback() não tiver sido chamado, o drain() precisa bloquear até a conclusão. Se type==AUDIO_DRAIN_ALL, o esgotamento é concluído quando todos os dados gravados anteriormente são reproduzidos. Se type==AUDIO_DRAIN_EARLY_NOTIFY, o esgotamento é concluído pouco antes de todos os dados da faixa atual serem reproduzidos para permitir que o framework realize uma troca de faixa sem intervalos.
O esgotamento precisa retornar imediatamente na chamada stop() e flush() .
A implementação dessa função é obrigatória para a reprodução desativada.
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) |
Retorna uma contagem recente do número de frames de áudio apresentados a um observador externo. Isso exclui os frames que foram gravados, mas ainda estão no pipeline. A contagem não é redefinida para zero quando a saída entra em modo de espera. Também retorna o valor de CLOCK_MONOTONIC a partir desta contagem de apresentação. A contagem retornada precisa ser "recente", mas não precisa ser o valor mais recente possível. No entanto, o tempo associado deve corresponder à contagem retornada. Exemplo: suponha que N+M frames foram apresentados, em que M é um número "pequeno". Então, é permitido retornar N em vez de N+M, e o carimbo de data/hora deve corresponder a N, e não a N+M. Os termos "recente" e "pequeno" não estão definidos. Elas refletem a qualidade da implementação.
Somente 3.0 e versões mais recentes.
int(* get_render_position)(const struct audio_stream_out *stream, uint32_t *dsp_frames) |
int(* pause)(struct audio_stream_out *stream) |
Notifica o driver de áudio para interromper a reprodução, mas os buffers em fila são mantidos pelo hardware. Útil para implementar pausa/retomada. A implementação vazia, se não tiver suporte, precisa ser implementada para hardware com latência não trivial. No estado de pausa, o hardware de áudio ainda pode estar usando energia. O usuário pode considerar chamar suspend após um tempo limite.
A implementação dessa função é obrigatória para a reprodução desativada.
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) |
Use esse método em situações em que a mixagem de áudio é feita no hardware. Esse método serve como uma interface direta com o hardware, permitindo que você defina o volume diretamente, em vez de usar o framework. Esse método pode produzir várias saídas PCM ou codecs acelerados por hardware, como MP3 ou AAC.
ssize_t(* write)(struct audio_stream_out *stream, const void *buffer, size_t bytes) |
Grava o buffer de áudio no driver. Retorna o número de bytes gravados ou um status_t negativo. Se pelo menos um frame tiver sido gravado antes do erro, é recomendável que o driver retorne a contagem de bytes (curta) bem-sucedida e, em seguida, retorne um erro na chamada subsequente.
Se set_callback() tiver sido chamado anteriormente para ativar o modo sem bloqueio, o write() não poderá bloquear. Ele precisa gravar apenas o número de bytes que cabem no buffer do driver/hardware e retornar essa contagem de bytes. Se esse valor for menor que o tamanho de gravação solicitado, a função de callback precisará ser chamada quando mais espaço estiver disponível no buffer do driver/hardware.
A documentação desse struct foi gerada com base no seguinte arquivo:
- hardware/libhardware/include/hardware/ audio.h