[RK3288][Android6.0] Audio中的HW Params设置流程

本文深入探讨了Android 6.0中音频硬件参数的设置流程,特别是围绕period size这一关键参数,详细解析了从初始化到最终配置的代码路径。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Platform: Rockchip
OS: Android 6.0
Kernel: 3.10.92

这部分内容比较繁琐,,先从初始化开始了解里面参数意义,以period size

这个参数为线索来追终代码流程.

pcm_native.c
snd_pcm_hw_constraints_init():
int snd_pcm_hw_constraints_init(struct snd_pcm_substream *substream)
{
    struct snd_pcm_runtime *runtime = substream->runtime;
    //ASOC对应hw params有参数大小限制,一定要在它的范围内,否则设置无效.
    //相关信息都保存在hw_constraints中.
    struct snd_pcm_hw_constraints *constrs = &runtime->hw_constraints;
    int k, err;
......
    //每个hw参数规则都会被添加进去来作追踪.
    err = snd_pcm_hw_rule_add(runtime, 0, SNDRV_PCM_HW_PARAM_PERIOD_SIZE,
                  snd_pcm_hw_rule_mulkdiv, (void*) 8,
                  SNDRV_PCM_HW_PARAM_PERIOD_BYTES, SNDRV_PCM_HW_PARAM_FRAME_BITS, -1);
......
}
struct snd_pcm_hw_constraints {
    //mask用来表示后面的intervals是否能访问,没有设置是不行的.
    struct snd_mask masks[SNDRV_PCM_HW_PARAM_LAST_MASK -
             SNDRV_PCM_HW_PARAM_FIRST_MASK + 1];
    //保存所有hw param值.
    struct snd_interval intervals[SNDRV_PCM_HW_PARAM_LAST_INTERVAL -
                 SNDRV_PCM_HW_PARAM_FIRST_INTERVAL + 1];
    //目前已有规则总数
    unsigned int rules_num;
    //存规则势必要分配空间,当rules_num达到rules_all的时候,
    //会每次分配16个存储空间,而不是一次分配一个,这样可以提高效率,
    //因此rules_all总是>=rules_num.
    unsigned int rules_all;
    //所有规则用此结构表示.
    struct snd_pcm_hw_rule *rules;
};
snd_pcm_hw_rule_add():
int snd_pcm_hw_rule_add(struct snd_pcm_runtime *runtime, unsigned int cond,
            int var,
            snd_pcm_hw_rule_func_t func, void *private,
            int dep, ...)
{
    struct snd_pcm_hw_constraints *constrs = &runtime->hw_constraints;
    struct snd_pcm_hw_rule *c;
......
    //每添加一个interval,constrs->rules_num就会随着增加,
    //当超过constrs->rules_all,就需要分配新空间用于存储interval.
    if (constrs->rules_num >= constrs->rules_all) {
        struct snd_pcm_hw_rule *new;
        //基于效率,每次直接分配16个.
        unsi
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值