audio_Microphone: Add card preference for ALSA layer test
Some sound card has record device and channels limitation so that
existing rule to use default 'plughw:0,1' and channels 1, 2 doesn't
apply. Let alsa_util specify card preference about recording device
and channels.
BUG=chrome-os-partner:62629
TEST=test_that -b squawks <ip> audio_Microphone
Change-Id: I95baf20413b1002ba195f31c696198306c48bbf0
Reviewed-on: https://chromium-review.googlesource.com/444491
Commit-Ready: Hsinyu Chao <hychao@chromium.org>
Tested-by: Sathyanarayana Nujella <sathyanarayana.nujella@intel.com>
Reviewed-by: Sathyanarayana Nujella <sathyanarayana.nujella@intel.com>
Reviewed-by: Benson Leung <bleung@chromium.org>
diff --git a/client/cros/audio/alsa_utils.py b/client/cros/audio/alsa_utils.py
index 79d4676..51f9172 100644
--- a/client/cros/audio/alsa_utils.py
+++ b/client/cros/audio/alsa_utils.py
@@ -16,6 +16,13 @@
CONTROL_NAME_RE = re.compile("name='(.*)'")
SCONTROL_NAME_RE = re.compile("Simple mixer control '(.*)'")
+CARD_PREF_RECORD_DEV_IDX = {
+ 'bxtda7219max': 3,
+}
+
+CARD_PREF_RECORD_CHANNELS = {
+ 'bxtda7219max': [ 4 ],
+}
def _get_format_args(channels, bits, rate):
args = ['-c', str(channels)]
@@ -141,6 +148,37 @@
return None
return 'plughw:%d' % card_id
+def get_record_card_name(card_idx):
+ '''Gets the recording sound card name for given card idx.
+
+ Returns the card name inside the square brackets of arecord output lines.
+ '''
+ card_name_re = re.compile('card %d: .*?\[(.*?)\]' % card_idx)
+ cmd = ARECORD_PATH + ' -l'
+ p = cmd_utils.popen(shlex.split(cmd), stdout=cmd_utils.PIPE)
+ output, _ = p.communicate()
+ if p.wait() != 0:
+ raise RuntimeError('arecord -l command failed')
+
+ for line in output.splitlines():
+ match = card_name_re.search(line)
+ if match:
+ return match.group(1)
+ return None
+
+def get_card_preferred_record_channels():
+ '''Gets the preferred record channel counts for default sound card.
+
+ Returns the preferred value for default card in CARD_PREF_RECORD_CHANNELS.
+ If preferred value doesn't exist, return None.
+ '''
+ card_id = get_first_soundcard_with_control(cname='Mic Jack', scname='Mic')
+ if card_id is None:
+ return None
+ card_name = get_record_card_name(card_id)
+ if CARD_PREF_RECORD_CHANNELS.has_key(card_name):
+ return CARD_PREF_RECORD_CHANNELS[card_name]
+ return None
def get_default_record_device():
'''Gets the first record device.
@@ -152,6 +190,10 @@
if card_id is None:
return None
+ card_name = get_record_card_name(card_id)
+ if CARD_PREF_RECORD_DEV_IDX.has_key(card_name):
+ return 'plughw:%d,%d' % (card_id, CARD_PREF_RECORD_DEV_IDX[card_name])
+
# Get first device id of this card.
cmd = ARECORD_PATH + ' -l'
p = cmd_utils.popen(shlex.split(cmd), stdout=cmd_utils.PIPE)