rk tinyAlsaHal音频输入输出流程

1 Android9

1.1 sco output path:

InterFace TinyAlsaHal out_set_parameters (AUDIO_PARAMETER_STREAM_ROUTING) do_out_standby(out) out->>device赋值 out_write 第一次调用 if(out->>standby) start_output_stream pcm_open create_resampler out_write... InterFace TinyAlsaHal

1.2 sco input path:

InterFace TinyAlsaHal adev_open_input_stream ? create_resampler in_standby ? in_set_parameters (AUDIO_PARAMETER_STREAM_ROUTING) do_out_standby(out) in->>device很重要,表示输入类型 in->>device = val in_read 第一次调用 只有这里in->>standby才会变off. if(in->>standby) { start_input_stream in->>standby = false } pcm_open create_resampler in_read... InterFace TinyAlsaHal

安卓10以上

安卓10, 包括安卓10以上, 最新代码改了, 判断设备输入类型不使用out_set_parameters的参数, 而改为adev_create_audio_patch. 这个函数同时管理音频输入和输出.
sources 表示发起方设备, sink表示接收端设备. 这里是以i2s/pcm角色为例.
例如, SOC蓝牙音频(rk35xx) rx一路, 因为是音箱发来的, 所以device表示hci蓝牙, sink就是rk35xx自己. 反之相同.
样式:

tx: rk35xx(source)  -> ap6275s(sink)
rx: rk35xx(sink)    <- ap6275s(source)

以sco为例,我们来分析一下吧:

2.1 sco output path:

InterFace TinyAlsaHal adev_open_output_stream adev_add_stream_to_list (out->>dev, &out->>dev->>output_stream_list, &out->>list_node) adev_create_audio_patch (AUDIO_PARAMETER_STREAM_ROUTING) for_each_device out->>devices[i] = sinks[i].ext.device.type do_out_standby(out) start_output_stream() out_write 第一次调用 if(out->>standby) start_output_stream alt [!wasStandby] pcm_open和create_resampler 都在start_output_stream中. pcm_open create_resampler out_write... InterFace TinyAlsaHal

2.2 sco input path:

InterFace TinyAlsaHal adev_open_input_stream adev_addadev_open_input_stream_stream_to_list (in->>dev, &in->>dev->>input_stream_list, &in->>list_node) adev_create_audio_patch (AUDIO_PARAMETER_STREAM_ROUTING) in->>device = sources[0].ext.device.type do_in_standby(in) start_input_stream(in) in_read 第一次调用 if(in->>standby) start_input_stream(in) alt [!wasStandby] pcm_open,route_pcm_card_open, create_resampler_helper 都在start_output_stream中. pcm_open route_pcm_card_open create_resampler_helper in_read... InterFace TinyAlsaHal

很明显, 新的代码结构更清晰了.

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值