123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639 |
- ###############################################################################
- # COMMON DATA
- ###############################################################################
- ON_OFF=(
- "OFF"
- "ON"
- )
- YUV_FORMAT_NAME=(
- "AUTO"
- "YUV420"
- "YUV422"
- "YUV444"
- "YUV400"
- )
- ENDIAN_NAME=(
- "VDI_64BIT_LE"
- "VDI_64BIT_BE"
- "VDI_32BIT_LE"
- "VDI_32BIT_BE"
- )
- MIRROR_NAME=(
- "NONE"
- "VERTICAL"
- "HORIZONTAL"
- "BOTH"
- )
- JUSTIFY_NAME=(
- "MSB_JUSTFIED"
- "LSB_JUSTFIED"
- )
- YUV_PACKING_NAME=(
- "PLANAR"
- "SEMI-PLANAR(CbCr)"
- "SEMI-PLANAR(CrCb)"
- "YUYV"
- "UYVY"
- "YVYU"
- "VYUY"
- "444 PACK(8BIT)"
- "PPM(12BIT)"
- )
- SCALEDOWN_NAME=(
- "NONE"
- "1/2"
- "1/4"
- "1/8"
- )
- PASS="PASS"
- FAIL="FAIL"
- PASS="{color:green}*PASS*{color}"
- FAIL="{color:red}*FAIL*{color}"
- ###############################################################################
- # GLOBAL VARIABLES
- ###############################################################################
- g_fpga_reset=0 # 1 : reset fpga every time
- g_jpeg_12bit="false"
- ######################## COMMON VARAIABLES FOR DECODER ########################
- g_yuv_fmt_list=("${YUV_FORMAT_LIST[@]}")
- g_match_mode=1 # 0 - nomatch, 1 - yuv
- g_aclk=20
- g_cclk=20
- g_secondary_axi=0
- g_stream_endian=0
- g_frame_endian=0
- g_tiled_mode=0
- g_cbcr_format=0 # 0 - none, 1 - NV12, 2 - NV21
- g_fake_test=0
- ########################## VARAIABLES FOR PPU #################################
- g_rotation=0
- g_mirror=0
- ###############################################################################
- cmodel_pn_val="" # planar format
- cmodel_pk_val="" # packed format
- cmodel_nv_val="" # semi-planar
- ###############################################################################
- # GLOBAL FUNCTIONS
- ###############################################################################
- # get_random start end
- # generate constraint random value with @start end @end.
- #
- function get_random {
- start=$1
- end=$2
- size=$(($end - $start + 1))
- val2=$RANDOM
- val1=$(($val2 % size))
- val=$(($start + $val1%$size))
- echo "$val"
- }
- function gen_val {
- local min_val=$1
- local max_val=$2
- local default_val=$3
- local val
- if [ -z $default_val ] || [ "$default_val" == "-99" ]; then
- # Generate random value
- val=$(get_random $min_val $max_val)
- else
- val=$default_val
- fi
-
- echo "$val"
- }
- function gen_val_angle {
- local default_val=$1
- local val
- if [ -z $default_val ] || [ "$default_val" == "-99" ]; then
- val=$(($(get_random 0 3)*90))
- else
- val=$default_val
- fi
- echo "$val"
- }
- function gen_yuv_pack_12bit {
- local yuv_format=$1
- local default=$2
- local val
- case $yuv_format in
- 0) # No conversion
- val=0;;
- 1) # YUV420, 3 for ppm format
- val=$(gen_val 1 3 $default)
- if [ "$val" == "3" ]; then
- val=8 # PPM
- fi
- ;;
- 2) # YUV422
- val=$(gen_val 1 8 $default)
- if [ "$val" == "7" ]; then
- # 7 - YUV444 pack mode for 8bit yuv
- val=8
- fi
- ;;
- 3) # YUV444, 3 for ppm format
- val=$(gen_val 1 3 $default)
- if [ "$val" == "3" ]; then
- val=8
- fi
- ;;
- 4) # YUV400, 1 for ppm format
- val=$(gen_val 0 1 $default)
- if [ "$val" == "1" ]; then
- val=8
- fi
- ;;
- *) echo "Unknown yuv_format: $yuv_format"
- exit;;
- esac
- echo "$val"
- }
- function gen_yuv_pack_8bit {
- local yuv_format=$1
- local default=$2
- local val
- case $yuv_format in
- 0) # No conversion
- val=0;;
- 1) # YUV420
- val=$(gen_val 1 2 $default)
- ;;
- 2) # YUV422
- val=$(gen_val 1 6 $default)
- ;;
- 3) # YUV444, 3 for YUV444 pack
- val=$(gen_val 1 3 $default)
- if [ "$val" == "3" ]; then
- val="7"
- fi
- ;;
- 4) # YUV400
- val=0
- ;;
- *) echo "Unknown yuv_format: $yuv_format"
- exit 1;;
- esac
- echo "$val"
- }
- function gen_yuv_pack {
- local yuv_12bit=$1
- local yuv_format=$2
- local default=$3
- local val
- if [ "$yuv_12bit" == "1" ]; then
- val=$(gen_yuv_pack_12bit $yuv_format $default)
- else
- val=$(gen_yuv_pack_8bit $yuv_format $default)
- fi
- echo "$val"
- }
- # log_conf log_message log_file
- # write @log_message to @log_file
- #
- function log_conf {
- echo "$1" | tee -a "$2"
- }
- # parse_streamset_file streamset_path *array
- # - parse streamset file and store data into @g_stream_file_array
- #
- function parse_streamset_file {
- local f="$1"
- local index=0
- local line=""
- while read -r line || [ -n "$line" ]; do
- line="${line#*( )}" # remove front whitespace
- line="${line%%[ $'\t']*}" # remove start of whitespace
- line="${line//\\//}" # replace backslash to slash
- line="${line/$'\r'/}" # remove carriage return
- firstchar=${line:0:1}
- case "$firstchar" in
- "@") break;; # exit flag
- "#") continue;; # comment
- ";") continue;; # comment
- "") continue;; # comment
- *)
- esac
- eval $2[$index]="$line"
- index=$(($index + 1))
- done < $f
- }
- function convert_fmt_val_for_cmodel {
- local subsample=$1
- local orig_subsample=$2
- local ordering=$3
- ordering=$(tr '[:upper:]' '[:lower:]' <<< $ordering)
- cmodel_pn_val=0
- cmodel_pk_val=0
- cmodel_nv_val=0
- if [ "$ordering" == "none" ]; then
- case $subsample in
- 420) cmodel_pn_val=0;;
- 422) cmodel_pn_val=1;;
- 444) cmodel_pn_val=3;;
- *) cmodel_pn_val=5;;
- esac
- else
- if [ "$ordering" == "nv12" ] || [ "$ordering" == "nv21" ]; then
- if [ "$subsample" == "none" ]; then
- cmodel_pn_val=5
- if [ "$ordering" == "nv12" ]; then
- cmodel_pk_val=1
- else
- cmodel_pk_val=2
- fi
- else
- case $subsample in
- 400) cmodel_pn_val=4;;
- 420) cmodel_pn_val=0;;
- 422) cmodel_pn_val=1;;
- 440) cmodel_pn_val=2;;
- 444) cmodel_pn_val=3;;
- esac
- if [ "$ordering" == "nv12" ]; then
- cmodel_nv_val=1
- else
- cmodel_nv_val=2
- fi
- fi
- else
- case $ordering in
- yuyv) cmodel_pn_val=1
- cmodel_pk_val=3;;
- uyvy) cmodel_pn_val=1
- cmodel_pk_val=4;;
- yvyu) cmodel_pn_val=1
- cmodel_pk_val=5;;
- vyuy) cmodel_pn_val=1
- cmodel_pk_val=6;;
- ayuv) cmodel_pn_val=3
- cmodel_pk_val=7;;
- esac
- fi
- fi
- if [ "$g_tiled_mode" == "1" ]; then
- if [ "$cmodel_pn_val" == "5" ]; then
- # no conversion
- cmodel_nv_val=0
- cmodel_pk_val=1
- fi
- fi
- }
- function convert_fmt_val_for_refsw {
- local fmt=$1
- local srcsample=$2
- g_subsample="none"
- g_ordering="none"
- case $fmt in
- 420p) g_subsample="420";;
- 422p) g_subsample="422";;
- 444p) g_subsample="444";;
- nv12) if [ "$srcsample" != "420" ]; then
- g_subsample="420"
- fi
- g_ordering="nv12";;
- nv21) if [ "$srcsample" != "420" ]; then
- g_subsample="420"
- fi
- g_ordering="nv21";;
- nv16) if [ "$srcsample" != "422" ]; then
- g_subsample="422"
- fi
- g_ordering="nv12";;
- nv61) if [ "$srcsample" != "422" ]; then
- g_subsample="422"
- fi
- g_ordering="nv21";;
- nv16v) g_ordering="nv12";;
- nv61v) g_ordering="nv21";;
- nv24) if [ "$srcsample" != "444" ]; then
- g_subsample="444"
- fi
- g_ordering="nv12";;
- nv42) if [ "$srcsample" != "444" ]; then
- g_subsample="444"
- fi
- g_ordering="nv21";;
- yuyv) g_ordering="yuyv";;
- uyvy) g_ordering="uyvy";;
- yvyu) g_ordering="yvyu";;
- vyuy) g_ordering="vyuy";;
- ayuv) g_ordering="ayuv";;
- esac
- }
- function generate_golden_stream {
- local input=$1
- local output=$2
- local exec_path="${bin_dir}/${refc_exec}"
- local param=""
- local cmd=""
- if [ "$jpeg_12bit" == "1" ]; then
- param="-u"
- fi
- # ref_c do not support tiled mode.
- # In case of tiled mode, ref_c output data is same with linear mode.
- if [ "$g_tiled_mode" == "1" ]; then
- input=$(echo $input | sed 's/_tiled//g')
- fi
- param="$param -i $input -o ${output}"
- param="$param -g $(($g_mirror<<2 | $g_rotation/90))"
- param="$param -m 1 -ps $yuv_dir -pc $cfg_dir"
- if [ "$g_slice_height" ]; then
- param="$param -sh $g_slice_height"
- fi
- cmd="$exec_path $param"
- echo "$cmd"
- $cmd
- return $?
- }
- function generate_golden_yuv {
- local input=$1
- local output=$2
- local exec_path="${bin_dir}/${refc_exec}"
- local param=""
- local cmd=""
- if [ "$g_jpeg_12bit" == "true" ]; then
- param="-u"
- fi
- if [ "$cmodel_pn_val" != "" ]; then
- param="$param -pn $cmodel_pn_val"
- fi
- if [ "$cmodel_pk_val" != "" ]; then
- param="$param -pk $cmodel_pk_val"
- fi
- if [ "$cmodel_nv_val" != "" ]; then
- param="$param -v $cmodel_nv_val"
- fi
- param="$param -i $input -o $output"
- param="$param -g $(($g_mirror<<2 | $g_rotation/90))"
- if [ "$g_scale_h" != "" ]; then
- param="$param -sx $g_scale_h"
- fi
- if [ "$g_scale_v" != "" ]; then
- param="$param -sy $g_scale_v"
- fi
- if [ "$g_pixel_just" == "1" ]; then
- param="$param -z"
- fi
- cmd="$exec_path $param -c"
- echo "$cmd"
- $cmd
- return $?
- }
- function generate_input_yuv {
- local input_cfg=$1
- local param=""
- local cmd=""
- local bit_depth=0
- local input_yuv=""
- local _srcyuv=""
- local _width=0
- local _height=0
- local _format=0
- local _name=""
- local _firstchar=""
-
- # Parse input cfg file.
- while read cfg_line; do
- _firstchar=${cfg_line:0:1}
- case "$_firstchar" in
- "#") continue;; # comment
- ";") continue;; # comment
- "") continue;;
- esac
- _name=$(echo ${cfg_line} | cut -d' ' -f1)
- if [ "$_name" = "YUV_SRC_IMG" ]; then
- _srcyuv=$(echo ${cfg_line} | cut -d' ' -f2)
- elif [ "$_name" = "PICTURE_WIDTH" ]; then
- _width=$(echo ${cfg_line} | cut -d' ' -f2)
- elif [ "$_name" = "PICTURE_HEIGHT" ]; then
- _height=$(echo ${cfg_line} | cut -d' ' -f2)
- elif [ "$_name" = "IMG_FORMAT" ]; then
- _format=$(echo ${cfg_line} | cut -d' ' -f2)
- fi
- done < $input_cfg
- # Check the file exist
- echo "${yuv_dir}/${_srcyuv}"
- if [ -f "${yuv_dir}/${_srcyuv}" ]; then
- echo "File exist : ${yuv_dir}/${_srcyuv}"
- return 0
- fi
- # Copy lenear yuv
- input_yuv=$(echo $_srcyuv | sed 's/_tiled//g')
- cp "${yuv_dir}/${input_yuv}" ./
- if [ "$jpeg_12bit" == "1" ]; then
- bit_depth="16"
- else
- bit_depth="8"
- fi
- param="-i ${input_yuv} -o ${_srcyuv} --width=${_width} --height=${_height} --bit-depth=${bit_depth} --format=${_format} --map-type=1"
- # Execute tiled_mode program
- if [ "$simulation" == "true" ]; then
- gcc -o $tiled_exec ../../../fpga/board/ref-sw/tools/tiled_mode.c
- else
- gcc -o $tiled_exec tools/tiled_mode.c
- fi
- cmd="$tiled_exec $param"
- echo "$cmd"
- $cmd
- result=$?
- if [ "$result" != "0" ]; then
- return 1
- fi
- cp "${_srcyuv}" "${yuv_dir}/${_srcyuv}"
- return 0
- }
- # string get_stream_path(cfgfile)
- function generate_golden_stream_path {
- local cfgfile=$1
- streamset_name=$(basename $streamset_path)
- temp=`expr match "$streamset_name" '.*\(_[0-9]*\.cmd\)'`
- if [ "$temp" != "" ]; then
- streamset_name="${streamset_name%_[0-9]*\.cmd}.cmd"
- fi
- echo "streamset_name: $streamset_name"
- path="${stream_dir}/$codec_dir/$streamset_name"
- cfgname=$(basename $cfgfile)
- if [ ! -d "$path" ]; then
- mkdir -p "$path"
- fi
- path="$path/${cfgname}_0.$ext"
- g_func_ret_str=$path
- }
- function read_cfg {
- local cfg=$1
- if [ -f ${cfg} ]; then
- while read line2; do
- # remove right comment
- line2=$(echo $line2 | tr -d '\n')
- line2=$(echo $line2 | tr -d '\r')
- line2="${line2%%\#*}"
-
- attr=$(echo $line2 | cut -d' ' -f1)
- attr=$(echo $attr | tr -d ' ')
-
- value=$(echo $line2 | cut -d' ' -f2)
- #echo "attr=$attr, value=$value"
-
- case "$attr" in
- PICTURE_WIDTH) cfg_width="$value";;
- PICTURE_HEIGHT) cfg_height="$value";;
- IMG_FORMAT) cfg_img_format="$value";;
- *) ;;
- esac
- done < $cfg
- else
- echo "File is not exist ($cfg)"
- exit 1
- fi
- }
- function get_jpeg_info {
- local format=""
- local cmd="${bin_dir}/${refc_exec} -i $1 -m 1"
- if [ "$2" == "1" ]; then
- cmd="$cmd -u"
- fi
- $cmd > result.txt
- while read line; do
- line=$(echo $line | tr -d '\n')
- line=$(echo $line | tr -d '\r')
- line="${line%%\#*}"
- attr=$(echo $line | cut -d':' -f1)
- attr=$(echo $attr | tr -d ' ')
- value=$(echo $line | cut -d':' -f2-)
- value=$(echo $value | tr -d ' ')
- value="${value//:/}"
- if [ "$attr" == "OutputYUVformat" ]; then
- jpg_format="$value"
- break
- elif [ "$attr" == "Pictureconfig" ]; then
- value=${value%@*}
- jpg_width=$(echo $value | cut -d'x' -f1)
- jpg_height=$(echo $value | cut -d'x' -f2)
- fi
- done < result.txt
- echo "$format"
- }
- function gen_valid_slice_height {
- local pic_width=$1
- local pic_height=$2
- local fmt=$3
- local default=$4
- local temp=0
- local sample_factor_x=1
- local sample_factor_y=1
- local mcu_height=8
- local slice_height=0
- local num_mcu_h=0
- if [ ! -z $default ] && [ "$default" != "-99" ]; then
- echo "$default"
- return
- fi
- case $fmt in
- 0) # YUV420
- sample_factor_x=2
- sample_factor_y=2
- mcu_height=16;;
- 1) # YUV422
- sample_factor_x=2
- mcu_height=8;;
- 2) # YUV440
- sample_factor_y=2
- mcu_height=16;;
- 4) # YUV400
- mcu_height=32;;
- *) ;;
- esac
- num_mcu_h=$(($pic_height/$mcu_height))
- mcu_num_x_fac=$(($sample_factor_x * 8))
- mcu_num_y_fac=$(($sample_factor_y * 8))
- mcu_num_w=$((($pic_width+($mcu_num_x_fac-1))/$mcu_num_x_fac))
- temp=$(gen_val 1 $(($pic_height / $mcu_height)) $default)
- while [ $temp -gt 0 ] ; do
- slice_height=$(($temp * $mcu_height))
- s_mcu_num_h=$((($slice_height+($mcu_num_y_fac-1))/$mcu_num_y_fac))
- total_mcu_in_slice=$(($mcu_num_w * $s_mcu_num_h))
- if [ $total_mcu_in_slice -lt 65536 ]; then
- # A value of restart interval should be less than 65536
- break
- fi
- temp=$(gen_val 1 $(($pic_height / $mcu_height)) $default)
- done
- if [ "$slice_height" == "$pic_height" ]; then
- slice_height=$(($slice_height - $mcu_height))
- fi
- echo "$slice_height"
- }
|