On 03/18/2014 03:23 PM, Peter Ujfalusi wrote:
On 03/18/2014 03:20 PM, Peter Ujfalusi wrote:
We need to place constraint on the period if the read or write AFIFO is enabled and it is configured for more than one word otherwise the DMA will fail in buffer configuration where the sizes are not aligned with the requested FIFO configuration.
Oh, I edited the commit message and removed the text related to buffer size but I failed to do that for the commit title :(
Actually I still have issue with the constraint. If I play a 48KHz sample with mplayer it is fine: Trying preferred audio driver 'alsa', options '[none]' alsa-init: requested format: 48000 Hz, 2 channels, 9 alsa-init: using ALSA 1.0.27.2 alsa-init: setup for 1/2 channel(s) alsa-init: using device default alsa-init: opening device in blocking mode alsa-init: device reopened in blocking mode alsa-init: got buffersize=96000 alsa-init: got period size 1600 alsa: 48000 Hz/2 channels/4 bpf/96000 bytes buffer/Signed 16 bit Little Endian AO: [alsa] 48000Hz 2ch s16le (2 bytes per sample) AO: Description: ALSA-0.9.x-1.x audio output AO: Author: Alex Beregszaszi, Zsolt Barat joy@streamminister.de AO: Comment: under development Building audio filter chain for 48000Hz/2ch/s16le -> 48000Hz/2ch/s16le...
However if I play 44.1KHz sample with mplayer: Trying preferred audio driver 'alsa', options '[none]' alsa-init: requested format: 44100 Hz, 2 channels, 9 alsa-init: using ALSA 1.0.27.2 alsa-init: setup for 1/2 channel(s) alsa-init: using device default alsa-init: opening device in blocking mode alsa-init: device reopened in blocking mode ALSA ERROR hw_params: set_near (BUFFER_TIME) value = 500000 : Invalid argument ACCESS: RW_INTERLEAVED FORMAT: S16_LE SUBFORMAT: STD SAMPLE_BITS: 16 FRAME_BITS: 32 CHANNELS: 2 RATE: 44100 PERIOD_TIME: 50000 PERIOD_SIZE: NONE PERIOD_BYTES: [4736 65536] PERIODS: (1 19) BUFFER_TIME: 500000 BUFFER_SIZE: 22050 BUFFER_BYTES: 88200 TICK_TIME: ALL [AO_ALSA] Unable to set buffer time near: Invalid argument Failed to initialize audio driver 'alsa'
Now if I place the same constraint to the buffer size as well and playing the same 44.1KHz sample: Trying preferred audio driver 'alsa', options '[none]' alsa-init: requested format: 44100 Hz, 2 channels, 9 alsa-init: using ALSA 1.0.27.2 alsa-init: setup for 1/2 channel(s) alsa-init: using device default alsa-init: opening device in blocking mode alsa-init: device reopened in blocking mode alsa-init: got buffersize=88192 alsa-init: got period size 1696 alsa: 44100 Hz/2 channels/4 bpf/88192 bytes buffer/Signed 16 bit Little Endian AO: [alsa] 44100Hz 2ch s16le (2 bytes per sample) AO: Description: ALSA-0.9.x-1.x audio output AO: Author: Alex Beregszaszi, Zsolt Barat joy@streamminister.de AO: Comment: under development Building audio filter chain for 44100Hz/2ch/s16le -> 44100Hz/2ch/s16le...
It seams that I need to place the same constraint step to both period size and buffer size. For some reason snd_pcm_hw_params_set_buffer_time_near() fails in case of 44.1KHz when asking for 0.5s buffer when I placed step 32 constraint to period size. Placing the same 32 steps constraint to the buffer size as well will make things working (for mplayer at least)