AnsweredAssumed Answered

2010R1-RC5 ALSA incorrect playback period size

Question asked by jhen on Jan 13, 2012
Latest reply on Jan 18, 2012 by jhen

ALSA does not use the specified playback period size when using 6 input channels and 4 output channels on the AD1836. The requested playback period size is 160 (i.e. 20ms window) and ALSA ends up using 113. When 4 input channels and 4 output channels are chosen the ALSA uses the correct playback period size. This can be reproduce by using arecord and aplay as follows:


For 6 input and 4 output:

arecord -c 6 -r 8000 -f S16_LE --period-size=160 -v | aplay -c 4 -r 8000 -f S16_LE --period-size=160 -v

For 4 input and 4 output:
arecord -c 4 -r 8000 -f S16_LE --period-size=160 -v | aplay -c 4 -r 8000 -f S16_LE --period-size=160 -v


The verbose output for the 6 input and 4 output test follows. The problamatic playback section is in bold.
~~~~~~~~~~

Recording WAVE 'stdin' : Signed 16 bit Little Endian, Rate 8000 Hz, Channels 6
Plug PCM: Route conversion PCM (sformat=S16_LE)
  Transformation table:
    0 <- 0
    1 <- 1
    2 <- 2
    3 <- 3
    4 <- none
    5 <- none
Its setup is:
  stream       : CAPTURE
  access       : RW_INTERLEAVED
  format       : S16_LE
  subformat    : STD
  channels     : 6
  rate         : 8000
  exact rate   : 8000 (8000/1)
  msbits       : 16
  buffer_size  : 320
  period_size  : 160
  period_time  : 20000
  tstamp_mode  : NONE
  period_step  : 1
  avail_min    : 160
  period_event : 0
  start_threshold  : 1
  stop_threshold   : 320
  silence_threshold: 0
  silence_size : 0
  boundary     : 335544320
Slave: Rate conversion PCM (48000, sformat=S32_LE)
Its setup is:
  stream       : CAPTURE
  access       : MMAP_INTERLEAVED
  format       : S16_LE
  subformat    : STD
  channels     : 4
  rate         : 8000
  exact rate   : 8000 (8000/1)
  msbits       : 16
  buffer_size  : 320
  period_size  : 160
  period_time  : 20000
  tstamp_mode  : NONE
  period_step  : 1
  avail_min    : 160
  period_event : 0
  start_threshold  : 1
  stop_threshold   : 320
  silence_threshold: 0
  silence_size : 0
  boundary     : 335544320
Slave: Mmap emulation PCM
Its setup is:
  stream       : CAPTURE
  access       : MMAP_INTERLEAVED
  format       : S32_LE
  subformat    : STD
  channels     : 4
  rate         : 48000
  exact rate   : 48000 (48000/1)
  msbits       : 32
  buffer_size  : 1920
  period_size  : 960
  period_time  : 20000
  tstamp_mode  : NONE
  period_step  : 1
  avail_min    : 960
  period_event : 0
  start_threshold  : 6
  stop_threshold   : 1920
  silence_threshold: 0
  silence_size : 0
  boundary     : 2013265920
Slave: Hardware PCM card 0 'bf5xx_ad183x' device 0 subdevice 0
Its setup is:
  stream       : CAPTURE
  access       : RW_INTERLEAVED
  format       : S32_LE
  subformat    : STD
  channels     : 4
  rate         : 48000
  exact rate   : 48000 (48000/1)
  msbits       : 32
  buffer_size  : 1920
  period_size  : 960
  period_time  : 20000
  tstamp_mode  : NONE
  period_step  : 1
  avail_min    : 960
  period_event : 0
  start_threshold  : 6
  stop_threshold   : 1920
  silence_threshold: 0
  silence_size : 0
  boundary     : 2013265920
Playing WAVE 'stdin' : Signed 16 bit Little Endian, Rate 8000 Hz, Channels 6
Plug PCM: Rate conversion PCM (48000, sformat=S32_LE)
Its setup is:
  stream       : PLAYBACK
  access       : RW_INTERLEAVED
  format       : S16_LE
  subformat    : STD
  channels     : 6
  rate         : 8000
  exact rate   : 8000 (8000/1)
 
msbits       : 16
  buffer_size  : 227
  period_size  : 113
  period_time  : 14187
  tstamp_mode  : NONE
  period_step  : 1
  avail_min    : 113
  period_event : 0
  start_threshold  : 227
  stop_threshold   : 227
  silence_threshold: 0
  silence_size : 0
  boundary     : 238026752

Slave: Mmap emulation PCM
Its setup is:
  stream       : PLAYBACK
  access       : MMAP_INTERLEAVED
  format       : S32_LE
  subformat    : STD
  channels     : 6
  rate         : 48000
  exact rate   : 48000 (48000/1)
  msbits       : 32
  buffer_size  : 1362
  period_size  : 681
  period_time  : 14187
  tstamp_mode  : NONE
  period_step  : 1
  avail_min    : 681
  period_event : 0
  start_threshold  : 1362
  stop_threshold   : 1362
  silence_threshold: 0
  silence_size : 0
  boundary     : 1428160512
Slave: Hardware PCM card 0 'bf5xx_ad183x' device 0 subdevice 0
Its setup is:
  stream       : PLAYBACK
  access       : RW_INTERLEAVED
  format       : S32_LE
  subformat    : STD
  channels     : 6
  rate         : 48000
  exact rate   : 48000 (48000/1)
  msbits       : 32
  buffer_size  : 1362
  period_size  : 681
  period_time  : 14187
  tstamp_mode  : NONE
  period_step  : 1
  avail_min    : 681
  period_event : 0
  start_threshold  : 1362
  stop_threshold   : 1362
  silence_threshold: 0
  silence_size : 0
  boundary     : 1428160512

~~~~~~~~~~



The verbose output for the 4 input and 4 output test where the playback period size is correct follows.
~~~~~~~~~~
Recording WAVE 'stdin' : Signed 16 bit Little Endian, Rate 8000 Hz, Channels 4
Plug PCM: Rate conversion PCM (48000, sformat=S32_LE)
Its setup is:
  stream       : CAPTURE
  access       : RW_INTERLEAVED
  format       : S16_LE
  subformat    : STD
  channels     : 4
  rate         : 8000
  exact rate   : 8000 (8000/1)
  msbits       : 16
  buffer_size  : 320
  period_size  : 160
  period_time  : 20000
  tstamp_mode  : NONE
  period_step  : 1
  avail_min    : 160
  period_event : 0
  start_threshold  : 1
  stop_threshold   : 320
  silence_threshold: 0
  silence_size : 0
  boundary     : 335544320
Slave: Mmap emulation PCM
Its setup is:
  stream       : CAPTURE
  access       : MMAP_INTERLEAVED
  format       : S32_LE
  subformat    : STD
  channels     : 4
  rate         : 48000
  exact rate   : 48000 (48000/1)
  msbits       : 32
  buffer_size  : 1920
  period_size  : 960
  period_time  : 20000
  tstamp_mode  : NONE
  period_step  : 1
  avail_min    : 960
  period_event : 0
  start_threshold  : 6
  stop_threshold   : 1920
  silence_threshold: 0
  silence_size : 0
  boundary     : 2013265920
Slave: Hardware PCM card 0 'bf5xx_ad183x' device 0 subdevice 0
Its setup is:
  stream       : CAPTURE
  access       : RW_INTERLEAVED
  format       : S32_LE
  subformat    : STD
  channels     : 4
  rate         : 48000
  exact rate   : 48000 (48000/1)
  msbits       : 32
  buffer_size  : 1920
  period_size  : 960
  period_time  : 20000
  tstamp_mode  : NONE
  period_step  : 1
  avail_min    : 960
  period_event : 0
  start_threshold  : 6
  stop_threshold   : 1920
  silence_threshold: 0
  silence_size : 0
  boundary     : 2013265920
Playing WAVE 'stdin' : Signed 16 bit Little Endian, Rate 8000 Hz, Channels 4
Plug PCM: Rate conversion PCM (48000, sformat=S32_LE)
Its setup is:
stream       : PLAYBACK
  access       : RW_INTERLEAVED
  format       : S16_LE
  subformat    : STD
  channels     : 4
  rate         : 8000
  exact rate   : 8000 (8000/1)
  msbits       : 16
  buffer_size  : 320
  period_size  : 160
  period_time  : 20000
  tstamp_mode  : NONE
  period_step  : 1
  avail_min    : 160
  period_event : 0
  start_threshold  : 320
  stop_threshold   : 320
  silence_threshold: 0
  silence_size : 0
  boundary     : 335544320

Slave: Mmap emulation PCM
Its setup is:
  stream       : PLAYBACK
  access       : MMAP_INTERLEAVED
  format       : S32_LE
  subformat    : STD
  channels     : 4
  rate         : 48000
  exact rate   : 48000 (48000/1)
  msbits       : 32
  buffer_size  : 1920
  period_size  : 960
  period_time  : 20000
  tstamp_mode  : NONE
  period_step  : 1
  avail_min    : 960
  period_event : 0
  start_threshold  : 1920
  stop_threshold   : 1920
  silence_threshold: 0
  silence_size : 0
  boundary     : 2013265920
Slave: Hardware PCM card 0 'bf5xx_ad183x' device 0 subdevice 0
Its setup is:
  stream       : PLAYBACK
  access       : RW_INTERLEAVED
  format       : S32_LE
  subformat    : STD
  channels     : 4
  rate         : 48000
  exact rate   : 48000 (48000/1)
  msbits       : 32
  buffer_size  : 1920
  period_size  : 960
  period_time  : 20000
  tstamp_mode  : NONE
  period_step  : 1
  avail_min    : 960
  period_event : 0
  start_threshold  : 1920
  stop_threshold   : 1920
  silence_threshold: 0
  silence_size : 0
  boundary     : 2013265920
~~~~~~~~~~

Outcomes