高通音频驱动录音流程(五)

10 篇文章 9 订阅
7 篇文章 0 订阅

高通音频驱动录音流程(五)
mixer path 设置过程分析



网上关于音频驱动的文章,大多是进行框架性的介绍,关于音频驱动控件的配置及录音播放介绍的很少,下面就已高通sm6350的mic通路配置及录音的配置,进行音频驱动流程的介绍。

录音通路配置

/* 下面这三个是对swr侧进行配置 */
tinymix "TX DEC1 MUX" "SWR_MIC"
tinymix "TX SMIC MUX1" "ADC0"
tinymix "TX_AIF1_CAP Mixer DEC1" "1"
/* Enables soundwire slave device data path */
tinymix "ADC1_MIXER Switch" "1"
/* 配置DMA的channel及bolero的音量增益 */
tinymix "TX_CDC_DMA_TX_3 Channels" "One"
tinymix "TX_DEC1 Volume" "80"
/* 将fe与be连接,其中MultiMedia1对应的时deep buffer playback */
tinymix "MultiMedia1 Mixer TX_CDC_DMA_TX_3" "1"

调用tinycap命令时的音频播放流程

tinycap /sdcard/Music/test.wav -c 1 -r 48000 -b 16 -T 10

pcm->fd = open(fn, O_RDWR|O_NONBLOCK);
	snd_open
		snd_pcm_capture_open
			snd_pcm_open
				snd_pcm_open_file
					snd_pcm_open_substream
						substream->ops->open(substream))
							dpcm_fe_dai_open
								dpcm_fe_dai_startup
								dpcm_be_dai_startup
									soc_pcm_open
										cpu_dai->driver->ops->startup(substream, cpu_dai)
										component->driver->ops->open(substream)
										codec_dai->driver->ops->startup(substream, codec_dai)
										rtd->dai_link->ops->startup(substream);
ioctl(pcm->fd, SNDRV_PCM_IOCTL_INFO, &info))
	snd_pcm_ioctl
		snd_pcm_common_ioctl
			snd_pcm_info_user
				snd_pcm_info
ioctl(pcm->fd, SNDRV_PCM_IOCTL_HW_PARAMS, &params)
	snd_pcm_ioctl
		snd_pcm_common_ioctl
			snd_pcm_hw_params_user
				snd_pcm_hw_params
					substream->ops->hw_params(substream, params);
						dpcm_fe_dai_hw_params
						dpcm_be_dai_hw_params
							rtd->dai_link->be_hw_params_fixup(rtd, params)
							rtd->dai_link->ops->hw_params(substream, params)
							soc_dai_hw_params(substream, &codec_params, codec_dai)
							soc_dai_hw_params(substream, params, cpu_dai)
							rtd->dai_link->be_hw_params_fixup(rtd, params)
							dai->driver->ops->hw_params(substream, params, dai)
							component->driver->ops->hw_params(substream, params)

ioctl(pcm->fd, SNDRV_PCM_IOCTL_SW_PARAMS, &sparams)
	snd_pcm_ioctl
		snd_pcm_common_ioctl
			snd_pcm_sw_params_user
				snd_pcm_sw_params
ioctl(pcm->fd, SNDRV_PCM_IOCTL_PREPARE)
	snd_pcm_ioctl
		snd_pcm_common_ioctl
			snd_pcm_prepare
				snd_pcm_action_nonatomic
					snd_pcm_action_prepare
						substream->ops->prepare(substream)
							dpcm_fe_dai_prepare
							dpcm_be_dai_prepare
								soc_pcm_prepare
									rtd->dai_link->ops->prepare(substream)
									component->driver->ops->prepare(substream)
									codec_dai->driver->ops->prepare(substream, codec_dai)
									cpu_dai->driver->ops->prepare(substream, cpu_dai)
									dai->driver->ops->mute_stream(dai, mute, direction)
ioctl(pcm->fd, SNDRV_PCM_IOCTL_START)
	snd_pcm_ioctl
		snd_pcm_common_ioctl
			snd_pcm_start_lock_irq
				snd_pcm_action_lock_irq
					snd_pcm_action_start
						substream->ops->trigger(substream, SNDRV_PCM_TRIGGER_START)
							dpcm_fe_dai_trigger
								dpcm_fe_dai_do_trigger
									dpcm_dai_trigger_fe_be
										dpcm_be_dai_trigger
											soc_pcm_trigger
												codec_dai->driver->ops->trigger(substream, cmd, codec_dai)									
												cmponent->driver->ops->trigger(substream, cmd)
												cpu_dai->driver->ops->trigger(substream, cmd, cpu_dai)
												rtd->dai_link->ops->trigger(substream, cmd)

ioctl(pcm->fd, SNDRV_PCM_IOCTL_READI_FRAMES, &x)
	snd_pcm_ioctl
		snd_pcm_common_ioctl
			snd_pcm_xferi_frames_ioctl
				snd_pcm_lib_read
					__snd_pcm_lib_xfer
					
  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值