Referencia de la estructura audio_stream_out

Referencia de la estructura audio_stream_out

#include < audio.h >

Campos de datos

struct audio_stream   común
 
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 devolución de llamada, 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)
 

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.

Definición en la línea 276 del archivo audio.h .

Documentación de campos

struct audio_stream common

Métodos comunes de la 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 en los que se sabe que audio_stream hace referencia a un audio_stream_out .

Definición en la línea 282 del archivo audio.h .

int(* drain)(struct audio_stream_out *stream, audio_drain_type_t type)

Solicita una notificación cuando se reproducen los datos almacenados en búfer por el controlador o el hardware. Si previamente se llamó a set_callback() para habilitar el modo no bloqueador, drain() no debe bloquearse, sino que debe mostrarse rápidamente y la finalización del drenaje se notifica a través de la devolución de llamada. Si no se llamó a set_callback() , drain() debe bloquearse hasta que se complete. Si type==AUDIO_DRAIN_ALL, el drenaje se completa cuando se reproducen todos los datos escritos anteriormente. Si type==AUDIO_DRAIN_EARLY_NOTIFY, el drenaje se completa poco antes de que se reproduzcan todos los datos de la pista actual para permitir que el framework realice un cambio de pista sin interrupciones.

El drenaje debe mostrarse de inmediato en la llamada stop() y flush() .

La implementación de esta función es obligatoria para la reproducción transferida.

Definición en la línea 372 del archivo audio.h .

int(* flush)(struct audio_stream_out *stream)

Notifica al controlador de audio que vacíe los datos en cola. El flujo ya debe estar pausado antes de llamar a flush() .

La implementación de esta función es obligatoria para la reproducción transferida.

Definición en la línea 380 del archivo audio.h .

uint32_t(* get_latency)(const struct audio_stream_out *stream)

Devuelve la latencia estimada del controlador de hardware de audio en milisegundos.

Definición en la línea 287 del archivo audio.h .

int(* get_next_write_timestamp)(const struct audio_stream_out *stream, int64_t *timestamp)

Obtén la hora local en la que se presentará la próxima escritura en el controlador de audio. Las unidades son microsegundos, y el HAL de audio local decide la época.

Definición en la línea 324 del archivo audio.h .

int(* get_presentation_position)(const struct audio_stream_out *stream, uint64_t *frames, struct timespec *timestamp)

Muestra un recuento reciente de la cantidad de fotogramas de audio que se presentan a un observador externo. Esto excluye los fotogramas que se escribieron, pero que aún se encuentran en la canalización. El recuento no se restablece a cero cuando la salida entra en modo de espera. También muestra el valor de CLOCK_MONOTONIC a partir de este recuento de presentación. Se espera que el recuento que se muestra 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 muestra. Ejemplo: Supongamos que se presentaron N+M fotogramas, donde M es un número “pequeño”. En ese caso, se permite mostrar 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.

Solo 3.0 y versiones posteriores.

Definición en la línea 398 del archivo audio.h .

int(* get_render_position)(const struct audio_stream_out *stream, uint32_t *dsp_frames)

Definición en la línea 317 del archivo audio.h .

int(* pause)(struct audio_stream_out *stream)

Notifica al controlador de audio que detenga la reproducción, pero el hardware retiene los búferes en cola. Es útil para implementar la pausa y la reanudación. Sin embargo, si no se admite, la implementación vacía debe implementarse para hardware con latencia no trivial. En el estado de pausa, el hardware de audio podría seguir consumiendo energía. El usuario puede considerar llamar a suspender después de un tiempo de espera.

La implementación de esta función es obligatoria para la reproducción transferida.

Definición en la línea 345 del archivo audio.h .

int(* resume)(struct audio_stream_out *stream)

Notifica al controlador de audio que reanude la reproducción después de una pausa. Muestra un error si se lo llama sin una pausa coincidente.

La implementación de esta función es obligatoria para la reproducción transferida.

Definición en la línea 353 del archivo audio.h .

int(* set_callback)(struct audio_stream_out *stream, stream_callback_t callback, void *cookie)

Establece la función de devolución de llamada para notificar la finalización de la escritura y el drenaje no bloqueados. Llamar a esta función implica que todas las llamadas futuras a write() y drain() no deben ser de bloqueo y deben usar la devolución de llamada para indicar que se completó.

Definición en la línea 333 del archivo audio.h .

int(* set_volume)(struct audio_stream_out *stream, float left, float right)

Usa este método en situaciones en las que la mezcla de audio se realiza en el hardware. Este método funciona como una interfaz directa con el hardware, lo que te permite configurar el volumen directamente en lugar de hacerlo a través del framework. Este método puede producir varias salidas PCM o códecs con aceleración de hardware, como MP3 o AAC.

Definición en la línea 296 del archivo audio.h .

ssize_t(* write)(struct audio_stream_out *stream, const void *buffer, size_t bytes)

Escribe el búfer de audio en el controlador. Devuelve la cantidad 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 correcto (corto) y, luego, devuelva un error en la llamada posterior.

Si previamente se llamó a set_callback() para habilitar el modo sin bloqueo, write() no puede bloquearse. Debe escribir solo la cantidad de bytes que caben actualmente en el búfer del controlador o hardware y, luego, mostrar este recuento de bytes. Si 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 o el hardware.

Definición en la línea 311 del archivo audio.h .


La documentación de esta struct se generó a partir del siguiente archivo:
  • hardware/libhardware/include/hardware/ audio.h