Loading services/audiopolicy/engineconfigurable/tools/Android.bp +4 −2 Original line number Original line Diff line number Diff line Loading @@ -42,8 +42,8 @@ genrule_defaults { cmd: "cp $(locations :audio_policy_configuration_files) $(genDir)/. && " + cmd: "cp $(locations :audio_policy_configuration_files) $(genDir)/. && " + "cp $(location :audio_policy_configuration_top_file) $(genDir)/audio_policy_configuration.xml && " + "cp $(location :audio_policy_configuration_top_file) $(genDir)/audio_policy_configuration.xml && " + "$(location buildPolicyCriterionTypes.py) " + "$(location buildPolicyCriterionTypes.py) " + // @todo update if 1428659 is merged "--androidaudiobaseheader $(location :android_audio_base_header_file) " + " --androidaudiobaseheader $(location :libaudio_system_audio_base) " + " --androidaudiobaseheader system/media/audio/include/system/audio-base.h " + " --androidaudiocommonbaseheader $(location :libaudio_system_audio_common_base) " + "--audiopolicyconfigurationfile $(genDir)/audio_policy_configuration.xml " + "--audiopolicyconfigurationfile $(genDir)/audio_policy_configuration.xml " + "--criteriontypes $(location :audio_policy_engine_criterion_types_template) " + "--criteriontypes $(location :audio_policy_engine_criterion_types_template) " + "--outputfile $(out)", "--outputfile $(out)", Loading @@ -51,6 +51,8 @@ genrule_defaults { // The commented inputs must be provided to use this genrule_defaults // The commented inputs must be provided to use this genrule_defaults // @todo uncomment if 1428659 is merged":android_audio_base_header_file", // @todo uncomment if 1428659 is merged":android_audio_base_header_file", ":audio_policy_engine_criterion_types_template", ":audio_policy_engine_criterion_types_template", ":libaudio_system_audio_base", ":libaudio_system_audio_common_base", // ":audio_policy_configuration_top_file", // ":audio_policy_configuration_top_file", // ":audio_policy_configuration_files", // ":audio_policy_configuration_files", ], ], Loading services/audiopolicy/engineconfigurable/tools/buildPolicyCriterionTypes.py +86 −16 Original line number Original line Diff line number Diff line Loading @@ -55,6 +55,11 @@ def parseArgs(): metavar="ANDROID_AUDIO_BASE_HEADER", metavar="ANDROID_AUDIO_BASE_HEADER", type=argparse.FileType('r'), type=argparse.FileType('r'), required=True) required=True) argparser.add_argument('--androidaudiocommonbaseheader', help="Android Audio CommonBase C header file, Mandatory.", metavar="ANDROID_AUDIO_COMMON_BASE_HEADER", type=argparse.FileType('r'), required=True) argparser.add_argument('--audiopolicyconfigurationfile', argparser.add_argument('--audiopolicyconfigurationfile', help="Android Audio Policy Configuration file, Mandatory.", help="Android Audio Policy Configuration file, Mandatory.", metavar="(AUDIO_POLICY_CONFIGURATION_FILE)", metavar="(AUDIO_POLICY_CONFIGURATION_FILE)", Loading Loading @@ -176,12 +181,12 @@ def parseAndroidAudioPolicyConfigurationFile(audiopolicyconfigurationfile): # -Output devices type # -Output devices type # -Input devices type # -Input devices type # # def parseAndroidAudioFile(androidaudiobaseheaderFile): def parseAndroidAudioFile(androidaudiobaseheaderFile, androidaudiocommonbaseheaderFile): # # # Adaptation table between Android Enumeration prefix and Audio PFW Criterion type names # Adaptation table between Android Enumeration prefix and Audio PFW Criterion type names # # criterion_mapping_table = { criterion_mapping_table = { 'AUDIO_MODE' : "AndroidModeType", 'HAL_AUDIO_MODE' : "AndroidModeType", 'AUDIO_DEVICE_OUT' : "OutputDevicesMaskType", 'AUDIO_DEVICE_OUT' : "OutputDevicesMaskType", 'AUDIO_DEVICE_IN' : "InputDevicesMaskType"} 'AUDIO_DEVICE_IN' : "InputDevicesMaskType"} Loading @@ -196,9 +201,9 @@ def parseAndroidAudioFile(androidaudiobaseheaderFile): ignored_values = ['CNT', 'MAX', 'ALL', 'NONE'] ignored_values = ['CNT', 'MAX', 'ALL', 'NONE'] criteria_pattern = re.compile( criteria_pattern = re.compile( r"\s*(?P<type>(?:"+'|'.join(criterion_mapping_table.keys()) + "))_" \ r"\s*V\((?P<type>(?:"+'|'.join(criterion_mapping_table.keys()) + "))_" \ r"(?P<literal>(?!" + '|'.join(ignored_values) + ")\w*)\s*=\s*" \ r"(?P<literal>(?!" + '|'.join(ignored_values) + ")\w*)\s*,\s*" \ r"(?P<values>(?:0[xX])?[0-9a-fA-F]+)") r"(?:AUDIO_DEVICE_BIT_IN \| )?(?P<values>(?:0[xX])?[0-9a-fA-F]+|[0-9]+)") logging.info("Checking Android Header file {}".format(androidaudiobaseheaderFile)) logging.info("Checking Android Header file {}".format(androidaudiobaseheaderFile)) Loading @@ -209,27 +214,91 @@ def parseAndroidAudioFile(androidaudiobaseheaderFile): androidaudiobaseheaderFile.name, line_number, line)) androidaudiobaseheaderFile.name, line_number, line)) criterion_name = criterion_mapping_table[match.groupdict()['type']] criterion_name = criterion_mapping_table[match.groupdict()['type']] literal = ''.join((w.capitalize() for w in match.groupdict()['literal'].split('_'))) criterion_literal = \ numerical_value = match.groupdict()['values'] ''.join((w.capitalize() for w in match.groupdict()['literal'].split('_'))) criterion_numerical_value = match.groupdict()['values'] # for AUDIO_DEVICE_IN: need to remove sign bit # for AUDIO_DEVICE_IN: need to remove sign bit / rename default to stub if criterion_name == "InputDevicesMaskType": if criterion_name == "InputDevicesMaskType": numerical_value = str(int(numerical_value, 0) & ~2147483648) if criterion_literal == "Default": criterion_numerical_value = str(int("0x40000000", 0)) else: try: string_int = int(criterion_numerical_value, 0) except ValueError: # Handle the exception logging.info("value {}:{} for criterion {} is not a number, ignoring" .format(criterion_numerical_value, criterion_literal, criterion_name)) continue criterion_numerical_value = str(int(criterion_numerical_value, 0) & ~2147483648) if criterion_name == "OutputDevicesMaskType": if criterion_literal == "Default": criterion_numerical_value = str(int("0x40000000", 0)) try: string_int = int(criterion_numerical_value, 0) except ValueError: # Handle the exception logging.info("The value {}:{} is for criterion {} is not a number, ignoring" .format(criterion_numerical_value, criterion_literal, criterion_name)) continue # Remove duplicated numerical values if int(criterion_numerical_value, 0) in all_criteria[criterion_name].values(): logging.info("criterion {} duplicated values:".format(criterion_name)) logging.info("{}:{}".format(criterion_numerical_value, criterion_literal)) logging.info("KEEPING LATEST") for key in list(all_criteria[criterion_name]): if all_criteria[criterion_name][key] == int(criterion_numerical_value, 0): del all_criteria[criterion_name][key] all_criteria[criterion_name][criterion_literal] = int(criterion_numerical_value, 0) logging.debug("type:{},".format(criterion_name)) logging.debug("iteral:{},".format(criterion_literal)) logging.debug("values:{}.".format(criterion_numerical_value)) logging.info("Checking Android Common Header file {}".format(androidaudiocommonbaseheaderFile)) criteria_pattern = re.compile( r"\s*(?P<type>(?:"+'|'.join(criterion_mapping_table.keys()) + "))_" \ r"(?P<literal>(?!" + '|'.join(ignored_values) + ")\w*)\s*=\s*" \ r"(?:AUDIO_DEVICE_BIT_IN \| )?(?P<values>(?:0[xX])?[0-9a-fA-F]+|[0-9]+)") for line_number, line in enumerate(androidaudiocommonbaseheaderFile): match = criteria_pattern.match(line) if match: logging.debug("The following line is VALID: {}:{}\n{}".format( androidaudiocommonbaseheaderFile.name, line_number, line)) criterion_name = criterion_mapping_table[match.groupdict()['type']] criterion_literal = \ ''.join((w.capitalize() for w in match.groupdict()['literal'].split('_'))) criterion_numerical_value = match.groupdict()['values'] try: string_int = int(criterion_numerical_value, 0) except ValueError: # Handle the exception logging.info("The value {}:{} is for criterion {} is not a number, ignoring" .format(criterion_numerical_value, criterion_literal, criterion_name)) continue # Remove duplicated numerical values # Remove duplicated numerical values if int(numerical_value, 0) in all_criteria[criterion_name].values(): if int(criterion_numerical_value, 0) in all_criteria[criterion_name].values(): logging.info("criterion {} duplicated values:".format(criterion_name)) logging.info("criterion {} duplicated values:".format(criterion_name)) logging.info("{}:{}".format(numerical_value, literal)) logging.info("{}:{}".format(criterion_numerical_value, criterion_literal)) logging.info("KEEPING LATEST") logging.info("KEEPING LATEST") for key in list(all_criteria[criterion_name]): for key in list(all_criteria[criterion_name]): if all_criteria[criterion_name][key] == int(numerical_value, 0): if all_criteria[criterion_name][key] == int(criterion_numerical_value, 0): del all_criteria[criterion_name][key] del all_criteria[criterion_name][key] all_criteria[criterion_name][literal] = int(numerical_value, 0) all_criteria[criterion_name][criterion_literal] = int(criterion_numerical_value, 0) logging.debug("type:{},".format(criterion_name)) logging.debug("type:{},".format(criterion_name)) logging.debug("iteral:{},".format(literal)) logging.debug("iteral:{},".format(criterion_literal)) logging.debug("values:{}.".format(numerical_value)) logging.debug("values:{}.".format(criterion_numerical_value)) return all_criteria return all_criteria Loading @@ -238,7 +307,8 @@ def main(): logging.root.setLevel(logging.INFO) logging.root.setLevel(logging.INFO) args = parseArgs() args = parseArgs() all_criteria = parseAndroidAudioFile(args.androidaudiobaseheader) all_criteria = parseAndroidAudioFile(args.androidaudiobaseheader, args.androidaudiocommonbaseheader) address_criteria = parseAndroidAudioPolicyConfigurationFile(args.audiopolicyconfigurationfile) address_criteria = parseAndroidAudioPolicyConfigurationFile(args.audiopolicyconfigurationfile) Loading Loading
services/audiopolicy/engineconfigurable/tools/Android.bp +4 −2 Original line number Original line Diff line number Diff line Loading @@ -42,8 +42,8 @@ genrule_defaults { cmd: "cp $(locations :audio_policy_configuration_files) $(genDir)/. && " + cmd: "cp $(locations :audio_policy_configuration_files) $(genDir)/. && " + "cp $(location :audio_policy_configuration_top_file) $(genDir)/audio_policy_configuration.xml && " + "cp $(location :audio_policy_configuration_top_file) $(genDir)/audio_policy_configuration.xml && " + "$(location buildPolicyCriterionTypes.py) " + "$(location buildPolicyCriterionTypes.py) " + // @todo update if 1428659 is merged "--androidaudiobaseheader $(location :android_audio_base_header_file) " + " --androidaudiobaseheader $(location :libaudio_system_audio_base) " + " --androidaudiobaseheader system/media/audio/include/system/audio-base.h " + " --androidaudiocommonbaseheader $(location :libaudio_system_audio_common_base) " + "--audiopolicyconfigurationfile $(genDir)/audio_policy_configuration.xml " + "--audiopolicyconfigurationfile $(genDir)/audio_policy_configuration.xml " + "--criteriontypes $(location :audio_policy_engine_criterion_types_template) " + "--criteriontypes $(location :audio_policy_engine_criterion_types_template) " + "--outputfile $(out)", "--outputfile $(out)", Loading @@ -51,6 +51,8 @@ genrule_defaults { // The commented inputs must be provided to use this genrule_defaults // The commented inputs must be provided to use this genrule_defaults // @todo uncomment if 1428659 is merged":android_audio_base_header_file", // @todo uncomment if 1428659 is merged":android_audio_base_header_file", ":audio_policy_engine_criterion_types_template", ":audio_policy_engine_criterion_types_template", ":libaudio_system_audio_base", ":libaudio_system_audio_common_base", // ":audio_policy_configuration_top_file", // ":audio_policy_configuration_top_file", // ":audio_policy_configuration_files", // ":audio_policy_configuration_files", ], ], Loading
services/audiopolicy/engineconfigurable/tools/buildPolicyCriterionTypes.py +86 −16 Original line number Original line Diff line number Diff line Loading @@ -55,6 +55,11 @@ def parseArgs(): metavar="ANDROID_AUDIO_BASE_HEADER", metavar="ANDROID_AUDIO_BASE_HEADER", type=argparse.FileType('r'), type=argparse.FileType('r'), required=True) required=True) argparser.add_argument('--androidaudiocommonbaseheader', help="Android Audio CommonBase C header file, Mandatory.", metavar="ANDROID_AUDIO_COMMON_BASE_HEADER", type=argparse.FileType('r'), required=True) argparser.add_argument('--audiopolicyconfigurationfile', argparser.add_argument('--audiopolicyconfigurationfile', help="Android Audio Policy Configuration file, Mandatory.", help="Android Audio Policy Configuration file, Mandatory.", metavar="(AUDIO_POLICY_CONFIGURATION_FILE)", metavar="(AUDIO_POLICY_CONFIGURATION_FILE)", Loading Loading @@ -176,12 +181,12 @@ def parseAndroidAudioPolicyConfigurationFile(audiopolicyconfigurationfile): # -Output devices type # -Output devices type # -Input devices type # -Input devices type # # def parseAndroidAudioFile(androidaudiobaseheaderFile): def parseAndroidAudioFile(androidaudiobaseheaderFile, androidaudiocommonbaseheaderFile): # # # Adaptation table between Android Enumeration prefix and Audio PFW Criterion type names # Adaptation table between Android Enumeration prefix and Audio PFW Criterion type names # # criterion_mapping_table = { criterion_mapping_table = { 'AUDIO_MODE' : "AndroidModeType", 'HAL_AUDIO_MODE' : "AndroidModeType", 'AUDIO_DEVICE_OUT' : "OutputDevicesMaskType", 'AUDIO_DEVICE_OUT' : "OutputDevicesMaskType", 'AUDIO_DEVICE_IN' : "InputDevicesMaskType"} 'AUDIO_DEVICE_IN' : "InputDevicesMaskType"} Loading @@ -196,9 +201,9 @@ def parseAndroidAudioFile(androidaudiobaseheaderFile): ignored_values = ['CNT', 'MAX', 'ALL', 'NONE'] ignored_values = ['CNT', 'MAX', 'ALL', 'NONE'] criteria_pattern = re.compile( criteria_pattern = re.compile( r"\s*(?P<type>(?:"+'|'.join(criterion_mapping_table.keys()) + "))_" \ r"\s*V\((?P<type>(?:"+'|'.join(criterion_mapping_table.keys()) + "))_" \ r"(?P<literal>(?!" + '|'.join(ignored_values) + ")\w*)\s*=\s*" \ r"(?P<literal>(?!" + '|'.join(ignored_values) + ")\w*)\s*,\s*" \ r"(?P<values>(?:0[xX])?[0-9a-fA-F]+)") r"(?:AUDIO_DEVICE_BIT_IN \| )?(?P<values>(?:0[xX])?[0-9a-fA-F]+|[0-9]+)") logging.info("Checking Android Header file {}".format(androidaudiobaseheaderFile)) logging.info("Checking Android Header file {}".format(androidaudiobaseheaderFile)) Loading @@ -209,27 +214,91 @@ def parseAndroidAudioFile(androidaudiobaseheaderFile): androidaudiobaseheaderFile.name, line_number, line)) androidaudiobaseheaderFile.name, line_number, line)) criterion_name = criterion_mapping_table[match.groupdict()['type']] criterion_name = criterion_mapping_table[match.groupdict()['type']] literal = ''.join((w.capitalize() for w in match.groupdict()['literal'].split('_'))) criterion_literal = \ numerical_value = match.groupdict()['values'] ''.join((w.capitalize() for w in match.groupdict()['literal'].split('_'))) criterion_numerical_value = match.groupdict()['values'] # for AUDIO_DEVICE_IN: need to remove sign bit # for AUDIO_DEVICE_IN: need to remove sign bit / rename default to stub if criterion_name == "InputDevicesMaskType": if criterion_name == "InputDevicesMaskType": numerical_value = str(int(numerical_value, 0) & ~2147483648) if criterion_literal == "Default": criterion_numerical_value = str(int("0x40000000", 0)) else: try: string_int = int(criterion_numerical_value, 0) except ValueError: # Handle the exception logging.info("value {}:{} for criterion {} is not a number, ignoring" .format(criterion_numerical_value, criterion_literal, criterion_name)) continue criterion_numerical_value = str(int(criterion_numerical_value, 0) & ~2147483648) if criterion_name == "OutputDevicesMaskType": if criterion_literal == "Default": criterion_numerical_value = str(int("0x40000000", 0)) try: string_int = int(criterion_numerical_value, 0) except ValueError: # Handle the exception logging.info("The value {}:{} is for criterion {} is not a number, ignoring" .format(criterion_numerical_value, criterion_literal, criterion_name)) continue # Remove duplicated numerical values if int(criterion_numerical_value, 0) in all_criteria[criterion_name].values(): logging.info("criterion {} duplicated values:".format(criterion_name)) logging.info("{}:{}".format(criterion_numerical_value, criterion_literal)) logging.info("KEEPING LATEST") for key in list(all_criteria[criterion_name]): if all_criteria[criterion_name][key] == int(criterion_numerical_value, 0): del all_criteria[criterion_name][key] all_criteria[criterion_name][criterion_literal] = int(criterion_numerical_value, 0) logging.debug("type:{},".format(criterion_name)) logging.debug("iteral:{},".format(criterion_literal)) logging.debug("values:{}.".format(criterion_numerical_value)) logging.info("Checking Android Common Header file {}".format(androidaudiocommonbaseheaderFile)) criteria_pattern = re.compile( r"\s*(?P<type>(?:"+'|'.join(criterion_mapping_table.keys()) + "))_" \ r"(?P<literal>(?!" + '|'.join(ignored_values) + ")\w*)\s*=\s*" \ r"(?:AUDIO_DEVICE_BIT_IN \| )?(?P<values>(?:0[xX])?[0-9a-fA-F]+|[0-9]+)") for line_number, line in enumerate(androidaudiocommonbaseheaderFile): match = criteria_pattern.match(line) if match: logging.debug("The following line is VALID: {}:{}\n{}".format( androidaudiocommonbaseheaderFile.name, line_number, line)) criterion_name = criterion_mapping_table[match.groupdict()['type']] criterion_literal = \ ''.join((w.capitalize() for w in match.groupdict()['literal'].split('_'))) criterion_numerical_value = match.groupdict()['values'] try: string_int = int(criterion_numerical_value, 0) except ValueError: # Handle the exception logging.info("The value {}:{} is for criterion {} is not a number, ignoring" .format(criterion_numerical_value, criterion_literal, criterion_name)) continue # Remove duplicated numerical values # Remove duplicated numerical values if int(numerical_value, 0) in all_criteria[criterion_name].values(): if int(criterion_numerical_value, 0) in all_criteria[criterion_name].values(): logging.info("criterion {} duplicated values:".format(criterion_name)) logging.info("criterion {} duplicated values:".format(criterion_name)) logging.info("{}:{}".format(numerical_value, literal)) logging.info("{}:{}".format(criterion_numerical_value, criterion_literal)) logging.info("KEEPING LATEST") logging.info("KEEPING LATEST") for key in list(all_criteria[criterion_name]): for key in list(all_criteria[criterion_name]): if all_criteria[criterion_name][key] == int(numerical_value, 0): if all_criteria[criterion_name][key] == int(criterion_numerical_value, 0): del all_criteria[criterion_name][key] del all_criteria[criterion_name][key] all_criteria[criterion_name][literal] = int(numerical_value, 0) all_criteria[criterion_name][criterion_literal] = int(criterion_numerical_value, 0) logging.debug("type:{},".format(criterion_name)) logging.debug("type:{},".format(criterion_name)) logging.debug("iteral:{},".format(literal)) logging.debug("iteral:{},".format(criterion_literal)) logging.debug("values:{}.".format(numerical_value)) logging.debug("values:{}.".format(criterion_numerical_value)) return all_criteria return all_criteria Loading @@ -238,7 +307,8 @@ def main(): logging.root.setLevel(logging.INFO) logging.root.setLevel(logging.INFO) args = parseArgs() args = parseArgs() all_criteria = parseAndroidAudioFile(args.androidaudiobaseheader) all_criteria = parseAndroidAudioFile(args.androidaudiobaseheader, args.androidaudiocommonbaseheader) address_criteria = parseAndroidAudioPolicyConfigurationFile(args.audiopolicyconfigurationfile) address_criteria = parseAndroidAudioPolicyConfigurationFile(args.audiopolicyconfigurationfile) Loading