自 2025 年 3 月 27 日起,我们建议您使用 android-latest-release
而非 aosp-main
构建 AOSP 并为其做出贡献。如需了解详情,请参阅 AOSP 的变更。
使用集合让一切井井有条
根据您的偏好保存内容并对其进行分类。
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 行。
在由驱动程序/硬件缓冲的数据已播放时请求通知。如果之前已调用
set_callback()
以启用非阻塞模式,则
drain()
不得阻塞,而应快速返回,并通过回调通知 drain 操作完成。如果尚未调用
set_callback()
,则
drain()
必须阻塞,直到完成。如果 type==AUDIO_DRAIN_ALL,则在播放之前写入的所有数据后,耗尽操作会完成。如果 type==AUDIO_DRAIN_EARLY_NOTIFY,则在当前轨道的所有数据播放完毕之前不久,系统会完成数据耗尽,以便框架有时间执行无缝轨道切换。
在调用 stop() 和
flush()
时,drain 必须立即返回
如需进行分流播放,必须实现此函数。
定义位于文件
audio.h 的
第 372 行。
通知音频驱动程序刷新队列中的数据。必须先暂停数据流,然后才能调用
flush()
。
如需进行分流播放,必须实现此函数。
定义位于文件
audio.h 的
第 380 行。
返回音频硬件驱动程序估算的延迟时间(以毫秒为单位)。
定义位于文件
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 的
第 345 行。
通知音频驱动程序在暂停后继续播放。如果在没有匹配的暂停时间的情况下进行调用,则会返回错误。
如需进行分流播放,必须实现此函数。
定义位于文件
audio.h 的
第 353 行。
设置回调函数,用于通知非阻塞写入和清空操作已完成。调用此函数意味着所有未来的
write()
和
drain()
都必须是无阻塞的,并使用回调来发出完成信号。
定义位于文件
audio.h 的
第 333 行。
在硬件中进行音频混音的情况下,请使用此方法。此方法可作为与硬件的直接接口,让您可以直接设置音量,而无需通过框架。此方法可能会生成多个 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
本页面上的内容和代码示例受内容许可部分所述许可的限制。Java 和 OpenJDK 是 Oracle 和/或其关联公司的注册商标。
最后更新时间 (UTC):2025-03-26。
[[["易于理解","easyToUnderstand","thumb-up"],["解决了我的问题","solvedMyProblem","thumb-up"],["其他","otherUp","thumb-up"]],[["没有我需要的信息","missingTheInformationINeed","thumb-down"],["太复杂/步骤太多","tooComplicatedTooManySteps","thumb-down"],["内容需要更新","outOfDate","thumb-down"],["翻译问题","translationIssue","thumb-down"],["示例/代码问题","samplesCodeIssue","thumb-down"],["其他","otherDown","thumb-down"]],["最后更新时间 (UTC):2025-03-26。"],[],[]]