#!/usr/bin/env python3 import os import sys import re format_wh_mapping = { "720P25": (1280, 720), "720P30": (1280, 720), "960P25": (1280, 960), "960P30": (1280, 960), "1080P15": (1920, 1080), "1080P20": (1920, 1080), "1080P25": (1920, 1080), "1080P30": (1920, 1080), "1080P60": (1920, 1080), "1200P30": (1600, 1200), "1536X1536P15": (1536, 1536), "1536X1536P25": (1536, 1536), "1536X1536P30": (1536, 1536), "1536P15": (2048, 1536), "1536P25": (2048, 1536), "1536P30": (2048, 1536), "1536P40": (2048, 1536), "400WP15": (2560, 1440), "400WP20": (2560, 1440), "400WP25": (2560, 1440), "400WP30": (2560, 1440), "500W12P5": (2592, 1944), "500WP15": (2592, 1944), "500WP20": (2592, 1944), "500WP25": (2592, 1944), "800W12P5": (3840, 2448), "800WP15": (3840, 2160), "800WP20": (3840, 2160), "800WP25": (3840, 2160), "800WP30": (3840, 2160), "270P240": (480, 270), "540P120": (960, 540), "540P180": (960, 540), "2304X1296P10": (2304, 1296), "2304X1296P15": (2304, 1296), "2304X1296P25": (2304, 1296), "2304X1296P30": (2304, 1296), "192X192P220": (192, 192), "384X384P110": (384, 384), "640X480P30": (640, 480), "3072X1728P15": (3072, 1728), "3072X1728P25": (3072, 1728), "2592X1440P15": (2592, 1440), "3840X2160P15": (3840, 2160), "2688X1520P15": (2688, 1520), "2688X1520P20": (2688, 1520), "2688X1520P25": (2688, 1520), "2688X1520P30": (2688, 1520), "2592X1952P30": (2592, 1952), "352X288P30": (352, 288), "2240X2016P30": (2240, 2016), "600WP20": (3200, 1800), "2464X1760P30": (2464, 1760), "3840X1080P30": (3840, 1080), "4096X128P25": (4096, 128), "4096X128P30": (4096, 128), "3264X2448P15": (3264, 2448), "5120X2160P15": (5120, 2160), "1920X1632P20": (1920, 1632), "1920X1632P30": (1920, 1632), "2880X1620P15": (2880, 1620), "2880X1620P20": (2880, 1620), "2880X1620P25": (2880, 1620), "2880X1620P30": (2880, 1620), } def get_format_wh(format): return format_wh_mapping.get(format, (0, 0)) def write_sensor(string): pattern = r'^FH_USING_([A-Za-z0-9]+)_([A-Za-z0-9]+)_G([0-9])$' match = re.match(pattern, string) if match: sensor, mipi, group = match.groups() sensor_name = "SENSOR_NAME_G{} {}".format(group, '"{}"'.format("{}_{}".format(sensor.lower(), mipi.lower()))) return sensor_name return None def write_sensor_format(string): wdr_s = r'^FH_APP_USING_FORMAT_([A-Za-z0-9]+)_WDR_G([0-9])$' line_s = r'^FH_APP_USING_FORMAT_([A-Za-z0-9]+)_G([0-9])$' slave_s = r'^FH_APP_USING_FORMAT_([A-Za-z0-9]+)_SLAVE_G([0-9])$' selfsync_s = r'^FH_APP_USING_FORMAT_([A-Za-z0-9]+)_SELFSYNC_G([0-9])$' match = re.match(line_s, string) if match: format, group = match.groups() w, h = get_format_wh(format) isp_format = "ISP_FORMAT_G{} FORMAT_{}".format(group, format) isp_vo_w = "VI_INPUT_WIDTH_G{} {}".format(group, w) isp_vo_h = "VI_INPUT_HEIGHT_G{} {}".format(group, h) return isp_format, isp_vo_w, isp_vo_h match = re.match(wdr_s, string) if match: format, group = match.groups() w, h = get_format_wh(format) isp_format = "ISP_FORMAT_G{} FORMAT_WDR_{}".format(group, format) isp_vo_w = "VI_INPUT_WIDTH_G{} {}".format(group, w) isp_vo_h = "VI_INPUT_HEIGHT_G{} {}".format(group, h) return isp_format, isp_vo_w, isp_vo_h match = re.match(slave_s, string) if match: format, group = match.groups() w, h = get_format_wh(format) isp_format = "ISP_FORMAT_G{} FORMAT_{}_SLAVE".format(group, format) isp_vo_w = "VI_INPUT_WIDTH_G{} {}".format(group, w) isp_vo_h = "VI_INPUT_HEIGHT_G{} {}".format(group, h) return isp_format, isp_vo_w, isp_vo_h match = re.match(selfsync_s, string) if match: format, group = match.groups() w, h = get_format_wh(format) isp_format = "ISP_FORMAT_G{} FORMAT_{}_SELFSYNC".format(group, format) isp_vo_w = "VI_INPUT_WIDTH_G{} {}".format(group, w) isp_vo_h = "VI_INPUT_HEIGHT_G{} {}".format(group, h) return isp_format, isp_vo_w, isp_vo_h return None def write_config(config_filename, filename, chipname): config_h = open(filename, 'w') config_h.write('#ifndef __CONFIG_H__\n') config_h.write('#define __CONFIG_H__\n\n') #config_h.write('#define JPEG_CHN_OFFSET 3\n') if chipname == 'FH8866': config_h.write('#define MAX_VPU_CHN_NUM 4\n') config_h.write('#define MAX_GRP_NUM 3\n') if chipname == 'FH8852V30X_FH8662V100' or chipname == 'QM102V': config_h.write('#define MAX_VPU_CHN_NUM 3\n') config_h.write('#define MAX_GRP_NUM 2\n') if chipname == 'C3JX': config_h.write('#define MAX_VPU_CHN_NUM 4\n') config_h.write('#define MAX_GRP_NUM 2\n') if chipname == 'U2RX': config_h.write('#define MAX_VPU_CHN_NUM 3\n') config_h.write('#define MAX_GRP_NUM 1\n') config = open(config_filename, 'r') empty_line = 1 for line in config: line = line.lstrip(' ').replace('\n', '').replace('\r', '') if len(line) == 0: continue if line[0] == '#': if len(line) == 1: if empty_line: continue config_h.write('\n') empty_line = 1 continue line = line[2:] config_h.write('/*%s */\n' % line) empty_line = 0 else: empty_line = 0 setting = line.split('=') if len(setting) >= 2: if setting[1] == 'y': config_h.write('#define %s\n' % setting[0]) sensor_name = write_sensor(setting[0]) if sensor_name: config_h.write('#define %s\n'% sensor_name) result = write_sensor_format(setting[0]) if result: isp_format, w, h = result config_h.write('#define %s\n'% isp_format) config_h.write('#define %s\n'% w) config_h.write('#define %s\n'% h) else: config_h.write('#define %s %s\n' % (setting[0], setting[1])) # 获取环境变量 BUILD_ID,如果不存在则默认为 0 BUILD_ID = os.environ.get('BUILD_ID', '0') # 默认为 '0',如果环境变量不存在 # 写入 CONFIG_BUILD_ID config_h.write(f'#define CONFIG_BUILD_ID "{BUILD_ID}"\n') config_h.write('\n') config_h.write('#endif\n') config_h.close() if __name__ == '__main__': if len(sys.argv) < 2: sys.exit(1) config_filename = sys.argv[1] filename = sys.argv[2] chipname = sys.argv[3] write_config(config_filename, filename, chipname)