linuxOS_MC3302/sdk/X-AIOS-LT00-V1.0.4/build/kconf/menu_anno.py

211 lines
6.8 KiB
Python
Raw Normal View History

2026-01-30 08:53:24 +00:00
#!/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)