xiaoyu/project/make_meta/build_meta.sh
2025-03-04 22:36:42 +08:00

318 lines
8.2 KiB
Bash
Executable File

#!/bin/bash
set -e
cwd=$(dirname $(readlink -f $0))
cd ${cwd}
CMD_VERSION="2.0.0"
function msg_info()
{
echo -e "[$(basename $0):info] $1"
}
function msg_warn()
{
echo -e "[$(basename $0):warn] $1"
}
function msg_error()
{
echo -e "[$(basename $0):error] $1"
}
function msg_help()
{
echo "command format:"
echo " `basename $cwd`"
echo " -v|--version (Optional) view this version."
echo " -h|--help (Optional) view this help message."
echo " -c|--clean (Optional) clean."
echo " -e|--export (Optional) export include files."
echo " --main_sensor_iq (Optional) input main camera sensor's iq bin file."
echo " --second_sensor_iq (Optional) input secondary camera sensor's iq bin file."
echo " --cam_iqfile (Optional) input camera sensor IQ file."
echo " --meta_param (Optional) input meta parameters."
echo " --output (Optional) config output dir for meta.img"
echo " --rootfs_dir (Optional) the dir of make_meta tool install"
echo " --media_dir (Optional) the dir of meta header files install"
echo " --pc_tools_dir (Optional) the dir of make_meta_host tool install"
echo " --tiny_meta (Optional) the flag of using tiny meta"
exit 0
}
function export_header_files()
{
if [ -n "$1" ];then
mkdir -p "${1}/include"
cp -f ${cwd}/include/*.h $1/include
else
msg_error "use format: ./build_meta.sh --export --media_dir ./dir_for_meta_head"
fi
exit 0
}
function __chk_param()
{
for item in $BUILD_META_PARAMS; do
if [ "$item" = "$1" ];then
echo ""
return
fi
done
echo "$1"
}
function chk_param()
{
BUILD_META_PARAMS="-v --version -h --help -c --clean --main_sensor_iq --second_sensor_iq -e --export --cam_iqfile --meta_param --output --rootfs_dir --media_dir --pc_tools_dir --tiny_meta"
local cnt
cnt=0
while [ $# -ne 0 ]
do
case $1 in
-e|--export)
msg_info "export include files"
BUILD_META_EXPORT_HEADER=YES
;;
-v|--version)
msg_info "V$CMD_VERSION"
exit 0
;;
-h|--help)
msg_help
;;
-c|--clean)
make -C ${cwd}/sensor_ae_awb_table clean
make -C ${cwd}/sensor_init clean
make -C ${cwd}/make_meta clean
make -C ${cwd}/zlib clean
rm -rf ${cwd}/meta.img
exit 0
;;
--second_sensor_iq)
SECONDARY_SENSOR_IQ_BIN="$2"
;;
--main_sensor_iq)
SENSOR_IQ_BIN="$2"
;;
--cam_iqfile)
shift
for item in $@; do
ret=$(__chk_param $item)
if [ "$ret"x = "x" ]; then
break
else
rk_camera_sensor_iqfiles="$rk_camera_sensor_iqfiles $ret"
fi
done
;;
--meta_param)
shift
for item in $@; do
if [ "${item%=*}" = "--meta_part_size" ]; then
META_PART_SIZE=${item#*=}
fi
ret=$(__chk_param $item)
if [ "$ret"x = "x" ]; then
break
else
rk_meta_param="$rk_meta_param $ret"
fi
done
;;
--output)
rk_project_output_image=$2
;;
--rootfs_dir)
rk_project_package_rootfs_dir=$2
;;
--media_dir)
rk_project_path_media=$2
;;
--pc_tools_dir)
rk_project_path_pc_tools=$2
;;
--tiny_meta)
rk_tiny_meta=$2
;;
*)
;;
esac
shift
done
if [ "$BUILD_META_EXPORT_HEADER"x = "YES"x ];then
export_header_files $rk_project_path_media
fi
if [ -f "$SENSOR_IQ_BIN" ];then
rk_camera_sensor_iqfiles="$SENSOR_IQ_BIN"
fi
if [ -f "$SECONDARY_SENSOR_IQ_BIN" ];then
if [ -z "$rk_camera_sensor_iqfiles" ];then
msg_error "not found main sensor iqbin"
msg_info " add --main_sensor_iq"
exit 1
else
rk_camera_sensor_iqfiles="$rk_camera_sensor_iqfiles $SECONDARY_SENSOR_IQ_BIN"
fi
fi
if [ -z "$rk_camera_sensor_iqfiles" -a ! "$rk_tiny_meta" = "y" ];then
msg_warn "invalid parameter"
msg_help
fi
}
chk_param $@
build_target_image=meta.img
build_target_bin="${cwd}/make_meta/make_meta"
SENSOR_AE_AWB_TABLE="${cwd}/sensor_ae_awb_table/ae_awb_table.bin"
SENSOR_INIT_BIN="${cwd}/sensor_init/init_sensor.bin"
if [ ! "$rk_tiny_meta" = "y" ]; then
__META_CAMERA_NUMBERS=0
for item in $rk_camera_sensor_iqfiles; do
__META_CAMERA_NUMBERS=$(( __META_CAMERA_NUMBERS + 1 ))
case $__META_CAMERA_NUMBERS in
1)
if [ -f "$rk_project_path_media/isp_iqfiles/${item}" ];then
SENSOR_IQ_BIN="$rk_project_path_media/isp_iqfiles/${item}"
fi
;;
2)
if [ -f "$rk_project_path_media/isp_iqfiles/${item}" ];then
SECONDARY_SENSOR_IQ_BIN="$rk_project_path_media/isp_iqfiles/${item}"
fi
;;
*)
msg_error "Not Support camera numbers!!!"
exit 1
;;
esac
done
if [ -z "$META_PART_SIZE" ];then
if [ $__META_CAMERA_NUMBERS -eq 2 ]; then
rk_meta_param="$rk_meta_param --meta_part_size=0xb0000"
fi
if [ $__META_CAMERA_NUMBERS -eq 1 ]; then
rk_meta_param="$rk_meta_param --meta_part_size=0x60000"
fi
fi
if [ $__META_CAMERA_NUMBERS -eq 2 ]; then
SECONDARY_SENSOR_INIT_BIN="${cwd}/sensor_init/init_secondary_sensor.bin"
else
SECONDARY_SENSOR_INIT_BIN=""
fi
msg_info "========================================"
msg_info "rk_camera_param=$rk_camera_param"
msg_info "rk_camera_sensor_iqfiles=${rk_camera_sensor_iqfiles}"
msg_info "rk_meta_param=$rk_meta_param"
msg_info "rk_project_output_image=$rk_project_output_image"
msg_info "rk_project_package_rootfs_dir=$rk_project_package_rootfs_dir"
msg_info "rk_project_path_media=$rk_project_path_media"
msg_info "rk_project_path_pc_tools=$rk_project_path_pc_tools"
msg_info "rk_tiny_meta=$rk_tiny_meta"
msg_info "SENSOR_IQ_BIN=$SENSOR_IQ_BIN"
msg_info "SECONDARY_SENSOR_IQ_BIN=$SECONDARY_SENSOR_IQ_BIN"
msg_info "========================================"
if [ -n "${rk_camera_param}" ];then
META_APP_PARAMETER=${rk_camera_param}
elif [ -n "${rk_meta_param}" ];then
META_APP_PARAMETER=${rk_meta_param}
else
META_APP_PARAMETER=""
fi
support_sensors="os02k10 sc301iot sc501ai sc230ai sc200ai sc3338 sc4336 gc2093 gc3003"
for item in $support_sensors
do
if [ -n "${SENSOR_IQ_BIN}" ];then
if basename $SENSOR_IQ_BIN | grep -i "$item"; then
export SENSOR_TARGET=$item
fi
fi
if [ -n "${SECONDARY_SENSOR_IQ_BIN}" ];then
if basename $SECONDARY_SENSOR_IQ_BIN | grep "$item"; then
export SECONDARY_SENSOR_TARGET=$item
META_APP_PARAMETER="$META_APP_PARAMETER --secondary_sensor_init=${SECONDARY_SENSOR_INIT_BIN}"
fi
fi
done
if [ -z "${SENSOR_TARGET}" ];then
msg_error "Not found main camera sensor config, please add [support_sensors] in $(basename $0)"
exit 1
fi
if [ -n "${SECONDARY_SENSOR_IQ_BIN}" ];then
if [ -z "${SECONDARY_SENSOR_TARGET}" ];then
msg_error "Not found secondary camera sensor config, please add [support_sensors] in $(basename $0)"
exit 1
fi
fi
# get secondary camera sensor iq size
if [ -f "${SECONDARY_SENSOR_IQ_BIN}" ];then
SECONDARY_SENSOR_IQ_BIN_SIZE=`wc -c ${SECONDARY_SENSOR_IQ_BIN} | awk '{print $1}'`
META_APP_PARAMETER="$META_APP_PARAMETER --secondary_sensor_iq_bin=${SECONDARY_SENSOR_IQ_BIN}"
fi
fi # if [ ! "$rk_tiny_meta" = "y" ];
make -C ${cwd}/sensor_ae_awb_table
make -C ${cwd}/sensor_init main_sensor=$SENSOR_TARGET secondary_sensor=$SECONDARY_SENSOR_TARGET
make -C ${cwd}/zlib
make -C ${cwd}/make_meta
if [ -d "${rk_project_path_pc_tools}" ]; then
cp -f ${cwd}/make_meta/make_meta_host ${rk_project_path_pc_tools}/
fi
if [ "$rk_tiny_meta" = "y" ]; then
${cwd}/make_meta/make_meta_host --create \
--meta_path=${cwd}/${build_target_image} \
--cmdline="${CMDLINE}"
else
META_APP_PARAMETER="--create \
--meta_path=${cwd}/${build_target_image} \
--cmdline=${CMDLINE} \
--sensor_init=${SENSOR_INIT_BIN} \
--sensor_iq_bin=${SENSOR_IQ_BIN} \
--ae_awb_tab=${SENSOR_AE_AWB_TABLE} \
$META_APP_PARAMETER"
echo "command: ${cwd}/make_meta/make_meta_host $META_APP_PARAMETER"
${cwd}/make_meta/make_meta_host ${META_APP_PARAMETER}
fi
if [ -f "${cwd}/${build_target_image}" ]; then
echo "Generate Camera meta data: ${build_target_image} "
if [ -n "${rk_project_output_image}" ]; then
mkdir -p "${rk_project_output_image}"
cp -f ${cwd}/${build_target_image} ${rk_project_output_image}/
fi
if [ -n "${rk_project_package_rootfs_dir}" ]; then
mkdir -p "${rk_project_package_rootfs_dir}/bin"
cp -f ${build_target_bin} ${rk_project_package_rootfs_dir}/bin/
fi
exit 0
else
msg_error "build meta data failed"
exit 1
fi