audio_stream_out Referencia de estructura
#include < audio.h >
Campos de información | |
estructura audio_stream | común |
uint32_t(* | get_latency )(const struct audio_stream_out *transmisión) |
En t(* | set_volume )(struct audio_stream_out *flujo, flotar hacia la izquierda, flotar hacia la derecha) |
tamaño_t(* | escribir ) (struct audio_stream_out *stream, const void *buffer, size_t bytes) |
En t(* | get_render_position )(const struct audio_stream_out *flujo, uint32_t *dsp_frames) |
En t(* | get_next_write_timestamp )(const struct audio_stream_out *transmisión, int64_t *marca de tiempo) |
En t(* | set_callback (struct audio_stream_out *stream, stream_callback_t callback, void *cookie) |
En t(* | pausar ) (estructura audio_stream_out *transmisión) |
En t(* | reanudar ) (estructura audio_stream_out *transmisión) |
En t(* | drenaje (struct audio_stream_out *flujo, tipo audio_drain_type_t ) |
En t(* | enjuague ) (struct audio_stream_out *flujo) |
En t(* | get_presentation_position )(const struct audio_stream_out *stream, uint64_t *frames, struct timespec *timestamp) |
Descripción detallada
audio_stream_out es la interfaz de abstracción para el hardware de salida de audio.
Proporciona información sobre varias propiedades del controlador de hardware de salida de audio.
Documentación de campo
estructura audio_stream común |
Métodos comunes de transmisión de audio. Este debe ser el primer miembro de audio_stream_out ya que los usuarios de esta estructura transmitirán un audio_stream a un puntero audio_stream_out en contextos donde se sabe que audio_stream hace referencia a audio_stream_out .
int(* drenaje)(struct audio_stream_out *flujo, tipo audio_drain_type_t ) |
Solicita una notificación cuando se han reproducido los datos almacenados en el buffer por el controlador/hardware. Si se ha llamado previamente a set_callback() para habilitar el modo sin bloqueo, el drenaje() no debe bloquearse, en su lugar debe regresar rápidamente y la finalización del drenaje se notifica a través de la devolución de llamada. Si no se ha llamado a set_callback() , el drenaje() debe bloquearse hasta su finalización. Si type==AUDIO_DRAIN_ALL, el drenaje se completa cuando se han reproducido todos los datos escritos previamente. Si type==AUDIO_DRAIN_EARLY_NOTIFY, el drenaje se completa poco antes de que se hayan reproducido todos los datos de la pista actual para dar tiempo al marco para realizar un cambio de pista sin espacios.
Drain debe regresar inmediatamente al realizar la llamada stop() y flush()
La implementación de esta función es obligatoria para la reproducción descargada.
int(* color)(struct audio_stream_out *flujo) |
uint32_t(* get_latency)(const struct audio_stream_out *flujo) |
int(* get_next_write_timestamp)(const struct audio_stream_out *transmisión, int64_t *marca de tiempo) |
int(* get_presentation_position)(const struct audio_stream_out *stream, uint64_t *frames, struct timespec *marca de tiempo) |
Devuelve un recuento reciente del número de fotogramas de audio presentados a un observador externo. Esto excluye los fotogramas que se han escrito pero que aún están en proceso. El conteo no se restablece a cero cuando la salida entra en espera. También devuelve el valor de CLOCK_MONOTONIC a partir de este recuento de presentación. Se espera que el recuento devuelto sea "reciente", pero no es necesario que sea el valor más reciente posible. Sin embargo, el tiempo asociado debe corresponder al recuento que se devuelva. Ejemplo: supongamos que se han presentado N+M fotogramas, donde M es un número "pequeño". Entonces está permitido devolver N en lugar de N+M, y la marca de tiempo debe corresponder a N en lugar de N+M. Los términos "reciente" y "pequeño" no están definidos. Reflejan la calidad de la implementación.
3.0 y superiores únicamente.
int(* get_render_position)(const struct audio_stream_out *flujo, uint32_t *dsp_frames) |
int(* pausa)(struct audio_stream_out *transmisión) |
Notifica al controlador de audio que detenga la reproducción; sin embargo, el hardware retiene los buffers en cola. Útil para implementar pausa/reanudación. Sin embargo, la implementación vacía, si no es compatible, debe implementarse para hardware con latencia no trivial. En el estado de pausa, el hardware de audio aún podría estar consumiendo energía. El usuario puede considerar suspender la llamada después de un tiempo de espera.
La implementación de esta función es obligatoria para la reproducción descargada.
int(* reanudar)(struct audio_stream_out *transmisión) |
int(* set_callback)(struct audio_stream_out *stream, stream_callback_t callback, void *cookie) |
configure la función de devolución de llamada para notificar la finalización de la escritura y el drenaje sin bloqueo. Llamar a esta función implica que todas las escrituras () y drenajes () futuras deben ser sin bloqueo y usar la devolución de llamada para señalar la finalización.
int(* set_volume)(struct audio_stream_out *flujo, flotar hacia la izquierda, flotar hacia la derecha) |
Utilice este método en situaciones en las que la mezcla de audio se realiza en el hardware. Este método sirve como una interfaz directa con el hardware, lo que le permite configurar directamente el volumen en comparación con el marco. Este método puede producir múltiples salidas PCM o códecs acelerados por hardware, como MP3 o AAC.
ssize_t(* escritura)(struct audio_stream_out *flujo, const void *búfer, tamaño_t bytes) |
Escribe el búfer de audio en el controlador. Devuelve el número de bytes escritos o un status_t negativo. Si al menos una trama se escribió correctamente antes del error, se sugiere que el controlador devuelva ese recuento de bytes (corto) exitoso y luego devuelva un error en la llamada posterior.
Si se ha llamado previamente a set_callback() para habilitar el modo sin bloqueo , write() no puede bloquear. Debe escribir solo el número de bytes que caben actualmente en el búfer del controlador/hardware y luego devolver este recuento de bytes. Si esto es menor que el tamaño de escritura solicitado, se debe llamar a la función de devolución de llamada cuando haya más espacio disponible en el búfer del controlador/hardware.
La documentación para esta estructura se generó a partir del siguiente archivo:
- hardware/libhardware/include/hardware/ audio.h