I am using the ASRC in the imx6q, together with SSI based ALSA sound cards. When I configure the SSI ports to operate at a native sampling rate of 96KHz, then I can play back audio files with a sampling rate ranging from 44.1KHz up to 192 KHz. But when I configure the SSI ports to use a native sampling rate of 44.1 KHz, then the ASRC only works up to 88.2 KHz. When I configure the SSI ports to use a native sampling rate of 48 KHz, then the ASRC only works up to 96 KHz. When I try to play back higher sampling rate audio files, there is basically no audio and I am getting timeouts "conversion failed" error messages from the fsl-alsa-plugins library.
While everything is working fine for 96 KHz, I still want to set the SSI native sampling rate to 44.1 KHz, mainly because the overwhelming majority of content is still available at this rate. What could be the problem that cause the conversion errors?
could you tell me which bsp are you using? which part of code you modified?
I am using the yocto linux daisy branch with linux kernel version 3.10.53 (tag: imx_3.10.53_1.1.0_ga)
I have added a new SSI based sound card driver to this kernel, no other modifications. To the yocto distribution, I have added the fsl-alsa-plugins and defined aliases in /etc/asound.conf for the asrc. Here is the asound.conf:
defaults.pcm.rate_converter "asrcrate"
pcm.sc0 {
type hw
card 0
device 0
}
pcm.sc1 {
type hw
card 1
device 0
}
pcm.sc2 {
type hw
card 2
device 0
}
pcm.sc3 {
type hw
card 3
device 0
}
pcm.asrc0 {
type plug
slave {
pcm "sc0"
format S24_LE
channels 2
rate 96000
}
}
pcm.asrc1 {
type plug
slave {
pcm "sc1"
format S24_LE
channels 2
rate 96000
}
}
pcm.asrc2 {
type plug
slave {
pcm "sc2"
format S24_LE
channels 2
rate 44100
}
}
pcm.asrc3 {
type plug
slave {
pcm "sc3"
format S24_LE
channels 2
rate 48000
}
}
pcm.sv_sc0 {
type softvol
slave {
pcm "sc0"
}
control {
name "Master"
card 0
}
}
pcm.sv_sc1 {
type softvol
slave {
pcm "sc1"
}
control {
name "Master"
card 1
}
}
pcm.sv_sc3 {
type softvol
slave {
pcm "sc3"
}
control {
name "Master"
card 3
}
}
pcm.sv_asrc0 {
type softvol
slave {
pcm "asrc0"
}
control {
name "Master"
card 0
}
}
pcm.sv_asrc1 {
type softvol
slave {
pcm "asrc1"
}
control {
name "Master"
card 1
}
}
pcm.sv_asrc3 {
type softvol
slave {
pcm "asrc3"
}
control {
name "Master"
card 3
}
}