audio_stream_out 结构参考文档

audio_stream_out 结构参考文档

#include < audio.h >

数据字段

struct audio_stream   常见
 
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)
 

详细说明

audio_stream_out 是音频输出硬件的抽象接口。

它提供有关音频输出硬件驱动程序的各种属性的信息。

定义位于文件 audio.h 的第 276 行。

字段文档

struct audio_stream common

音频流出常用方法。此 必须 audio_stream_out 的第一个成员,因为此结构的用户会在已知 audio_stream 引用 audio_stream_out 的指针的上下文中将 audio_stream 转换为 audio_stream_out 指针。

定义位于文件 audio.h 的第 282 行。

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

在由驱动程序/硬件缓冲的数据已播放时请求通知。如果之前已调用 set_callback() 以启用非阻塞模式,则 drain() 不得阻塞,而应快速返回,并通过回调通知 drain 操作完成。如果尚未调用 set_callback() ,则 drain() 必须阻塞,直到完成。如果 type==AUDIO_DRAIN_ALL,则在播放之前写入的所有数据后,耗尽操作会完成。如果 type==AUDIO_DRAIN_EARLY_NOTIFY,则在当前轨道的所有数据播放完毕之前不久,系统会完成数据耗尽,以便框架有时间执行无缝轨道切换。

在调用 stop() 和 flush() 时,drain 必须立即返回

如需进行分流播放,必须实现此函数。

定义位于文件 audio.h 的 第 372 行。

int(* flush)(struct audio_stream_out *stream)

通知音频驱动程序刷新队列中的数据。必须先暂停数据流,然后才能调用 flush()

如需进行分流播放,必须实现此函数。

定义位于文件 audio.h 的 第 380 行。

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

返回音频硬件驱动程序估算的延迟时间(以毫秒为单位)。

定义位于文件 audio.h 的第 287 行。

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

获取下次向音频驱动程序写入数据的时间(本地时间)。单位为微秒,其中公元纪年由本地音频 HAL 决定。

定义位于文件 audio.h 的 第 324 行。

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 及更高版本。

定义位于文件 audio.h 398 行

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

定义位于文件 audio.h 317 行

int(* pause)(struct audio_stream_out *stream)

通知音频驱动程序停止播放,但硬件会保留队列中的缓冲区。这有助于实现暂停/恢复。不过,对于延迟时间较长的硬件,应实现空实现(如果不支持)。在暂停状态下,音频硬件可能仍在使用电源。用户可以考虑在超时后调用暂停。

如需进行分流播放,必须实现此函数。

定义位于文件 audio.h 的 第 345 行。

int(* resume)(struct audio_stream_out *stream)

通知音频驱动程序在暂停后继续播放。如果在没有匹配的暂停时间的情况下进行调用,则会返回错误。

如需进行分流播放,必须实现此函数。

定义位于文件 audio.h 的 第 353 行。

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

设置回调函数,用于通知非阻塞写入和清空操作已完成。调用此函数意味着所有未来的 write() drain() 都必须是无阻塞的,并使用回调来发出完成信号。

定义位于文件 audio.h 的 第 333 行。

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

在硬件中进行音频混音的情况下,请使用此方法。此方法可作为与硬件的直接接口,让您可以直接设置音量,而无需通过框架。此方法可能会生成多个 PCM 输出或硬件加速编解码器,例如 MP3 或 AAC。

定义位于文件 audio.h 的 第 296 行。

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

将音频缓冲区写入驱动程序。返回写入的字节数,或负的 status_t。如果在出现错误之前成功写入了至少一个帧,建议驱动程序返回成功写入的字节数(短),然后在后续调用中返回错误。

如果之前已调用 set_callback() 来启用非阻塞模式,则不允许 write() 阻塞。它只能写入当前适合驱动程序/硬件缓冲区的字节数,然后返回此字节数。如果此值小于请求的写入大小,则必须在驱动程序/硬件缓冲区中可用更多空间时调用回调函数。

定义位于文件 audio.h 的 第 311 行。


此结构体的文档是根据以下文件生成的:
  • hardware/libhardware/include/hardware/ audio.h