123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556 |
- #!/bin/bash
- source TestRunnerCommon.sh
- # Global varaibles for encoder options
- enable_sync=0
- wiki_log_file="./log/confluence.log"
- instance_num=0
- DEFAULT_BS_SIZE=5242880 # 5MB
- MIN_BS_SIZE=8192 # 8KB
- simulation="false"
- ################################################################################
- # Initialize parameter variables #
- ################################################################################
- function help {
- echo ""
- echo "-------------------------------------------------------------------------------"
- echo "Chips&Media conformance Tool v2.0"
- echo "All copyright reserved by Chips&Media"
- echo "-------------------------------------------------------------------------------"
- echo "$0 OPTION --input=cfg1,cfg2,... --instance-num=n"
- echo "-h help"
- echo "--enable-random It generates random parameters"
- echo "--bin-dir ref-c directory, default: ../../../design/ref_c/bin/Linux"
- echo "--cfg-dir base directory of encoder configuration files. default: ../../../fpga/board/jpgcfg_v20"
- echo "--yuv-dir base directory storing YUV. default: ./yuv"
- echo "--enable-tiledMode enable tiled mode"
- echo "--stream-endian ENDIAN bitstream endianness. refer to datasheet Chapter 4."
- echo "--frame-endian ENDIAN pixel endianness of 16bit input source. refer to datasheet Chapter 4."
- echo "--slice-height the vertical height of a slice. multiple of 16 for 420, multiple of 8 for others"
- echo "--enable-slice-intr enable get the interrupt at every slice encoded"
- echo "--pixelj 16bit-pixel justification. 0(default) - msb justified, 1 - lsb justified in little-endianness"
- echo "--bs-size bitstream buffer size in byte"
- echo "--instance-num The number of instances"
- }
- function generate_parameters {
- local input_file=$1
- local is_encoder=$2
- local ext="${input_file##%.}"
- if [ "$is_encoder" == "true" ]; then
- read_cfg $input_file
- else
- get_jpeg_info $input_file $jpeg_12bit
- fi
- if [ "$g_random_test" == "1" ] || [ "$txt_param_switch" == "1" ]; then
- g_stream_endian=$(gen_val 0 3 $stream_endian_temp)
- if [ "$jpeg_12bit" == "1" ]; then
- g_frame_endian=$(gen_val 0 7 $frame_endian_temp)
- else
- g_frame_endian=$(gen_val 0 3 $frame_endian_temp)
- fi
- slice_random=$(gen_val 0 1) # 0: disable slice done, 1: enable slice_done
- if [ "$slice_random" == "1" ] || [ "$slice_height_temp" != "0" ]; then
- if [ "$is_encoder" == "true" ]; then
- g_slice_height=$(gen_valid_slice_height $cfg_width $cfg_height $cfg_img_format $slice_height_temp)
- else
- pic_height_in_8=$(($jpg_height/8))
- if [ -z $slice_height_temp ]; then
- g_slice_height=$(gen_val 0 $pic_height_in_8 $slice_height_temp)
- g_slice_height=$(($g_slice_height * 8))
- else
- g_slice_height=$slice_height_temp
- fi
- fi
- if [ "$g_slice_height" != "0" ]; then
- g_enable_slice_intr=$(gen_val 0 1 $g_enable_slice_intr_temp)
- else
- g_enable_slice_intr=0
- fi
- else
- g_slice_height=0
- g_enable_slice_intr=0
- fi
- g_pixel_just=$(gen_val 0 1 $pixel_just_temp)
- g_bs_size=$(gen_val $MIN_BS_SIZE $DEFAULT_BS_SIZE $bs_size_temp)
- g_bs_size=$((($g_bs_size + 4095) & ~4095))
- g_tiled_mode=$(gen_val 0 0 $g_tiled_mode_temp)
- else
- g_stream_endian=$(gen_val 0 0 $stream_endian_temp)
- g_frame_endian=$(gen_val 0 0 $frame_endian_temp)
- if [ "$is_encoder" == "true" ]; then
- g_slice_height=$(gen_valid_slice_height $cfg_width $cfg_height $cfg_img_format $slice_height_temp)
- else
- pic_height_in_8=$(($jpg_height/8))
- if [ -z $slice_height_temp ]; then
- g_slice_height=$(gen_val 0 $pic_height_in_8 $slice_height_temp)
- g_slice_height=$(($g_slice_height * 8))
- else
- g_slice_height=$slice_height_temp
- fi
- fi
- g_enable_slice_intr=$(gen_val 0 0 $g_enable_slice_intr_temp)
- g_pixel_just=$(gen_val 0 0 $pixel_just_temp)
- g_bs_size=$(gen_val $DEFAULT_BS_SIZE $DEFAULT_BS_SIZE $bs_size_temp)
- g_bs_size=$((($g_bs_size + 4095) & ~4095))
- g_tiled_mode=$(gen_val 0 0 $g_tiled_mode_temp)
- fi
- }
- ################################################################################
- # Parse arguments #
- ################################################################################
- OPTSTRING="-o e:hw: -l input:"
- OPTSTRING="${OPTSTRING},enable-random,bin-dir:,cfg-dir:,yuv-dir:"
- OPTSTRING="${OPTSTRING},instance-num:,12bit:"
- OPTSTRING="${OPTSTRING},stream-endian:,frame-endian:,output:"
- OPTSTRING="${OPTSTRING},slice-height:,enable-slice-intr:,pixelj:,bs-size:,enable-tiledMode:"
- OPTS=`getopt $OPTSTRING -- "$@"`
- if [ $? -ne 0 ]; then
- exit 1
- fi
- eval set -- "$OPTS"
- while true; do
- case "$1" in
- -h)
- help
- exit 1
- shift;;
- -e)
- in_comp_param="$2"
- shift 2;;
- --bin-dir)
- bin_dir_user=$2
- shift 2;;
- --enable-random)
- g_random_test=1
- shift;;
- --cfg-dir)
- cfg_dir_user=$2
- shift 2;;
- --input)
- input_param=$2
- shift 2;;
- --yuv-dir)
- yuv_dir_user=$2
- shift 2;;
- #shift 2;;
- --instance-num)
- instance_num="$2"
- shift 2;;
- --12bit)
- jpeg_12bit_multi=$2
- shift 2;;
- --enable-tiledMode)
- g_tiled_mode_multi=$2
- shift 2;;
- --stream-endian)
- stream_endian_multi="$2"
- shift 2;;
- --frame-endian)
- frame_endian_multi="$2"
- shift 2;;
- --slice-height)
- slice_height_multi="$2"
- shift 2;;
- --enable-slice-intr)
- g_enable_slice_intr_multi="$2"
- shift 2;;
- --pixelj)
- pixel_just_multi="$2"
- shift 2;;
- --bs-size)
- bs_size_multi="$2"
- shift 2;;
- --output)
- output_multi="$2"
- shift 2;;
- --)
- shift
- break;;
- esac
- done
- shift $(($OPTIND - 1))
- yuv_dir="./yuv"
- #bin_dir="../../../design/ref_c/bin/Linux"
- bin_dir="./"
- #cfg_dir="../../../fpga/board/jpgcfg_v20"
- cfg_dir="./cfg"
- if [ "$simulation" == "true" ]; then
- ACLK_MIN=160
- ACLK_MAX=300
- CCLK_MIN=160
- CCLK_MAX=300
- DEFAULT_ACLK=200
- DEFAULT_CCLK=200
- test_exec="./runit"
- g_random_test=0
- else
- DEFAULT_ACLK=20
- DEFAULT_CCLK=20
- test_exec="./multi_instance_test"
- fi
- if [ -z $aclk_freq_temp ]; then
- g_aclk=$DEFAULT_ACLK
- else
- g_aclk=$aclk_freq_temp
- fi
- if [ -z $cclk_freq_temp ]; then
- g_cclk=$DEFAULT_CCLK
- else
- g_cclk=$cclk_freq_temp
- fi
- if [ ! -z $yuv_dir_user ]; then
- yuv_dir="$yuv_dir_user"
- fi
- if [ ! -z $cfg_dir_user ]; then
- cfg_dir="$cfg_dir_user"
- fi
- if [ ! -z $bin_dir_user ]; then
- bin_dir="$bin_dir_user"
- fi
- tiled_exec="./tiled_mode"
- if [ ! -f ./$test_exec ] ; then
- echo " $test_exec file doesn't exist";
- exit 1
- fi
- ################################################################################
- # make log info
- ################################################################################
- mkdir -p temp
- mkdir -p output
- mkdir -p log/multi_conformance
- if [ $simulation == "true" ]; then
- conf_log_path="simv.log"
- conf_err_log_path="simv_error.log"
- else
- conf_log_path="log/multi_conformance/${streamset_file}.log"
- conf_err_log_path="log/multi_conformance/${streamset_file}_error.log"
- fi
- temp_log_path="./temp/temp.log"
- echo "" > $conf_log_path
- echo "" > $conf_err_log_path
- echo "" > $temp_log_path
- beginTime=$(date +%s%N)
- output=()
- golden=()
- ################################################################################
- # Add test param #
- # Options of the each instance are seperated by "," #
- ################################################################################
- test_param=""
- comp_param=""
- for ((i=0;i<$instance_num;i++)); do
- #######################
- # separate parameters #
- #######################
- g_tiled_mode_temp=0
- jpeg_12bit=0
- if [ -n "$input_param" ]; then
- filename=$(echo ${input_param} | cut -d',' -f$(($i+1)))
- ext=${filename##*.}
- ext=$(tr '[:upper:]' '[:lower:]' <<< $ext)
- if [ "$ext" == "cfg" ]; then
- is_encoder="true"
- input_path=${cfg_dir}/${filename}
- refc_exec="Nieuport_JpgEnc"
- output[$i]="instance_${i}_output.jpg"
- golden[$i]="output_refc_${i}.jpg"
- else
- is_encoder="false"
- input_path="$filename"
- refc_exec="Nieuport_JpgDec"
- output[$i]="instance_${i}_output.yuv"
- golden[$i]="output_refc_${i}.yuv"
- fi
- rm -f ${output[$i]}
- rm -f ${golden[$i]}
- stream[$i]=$filename
- if [ "$comp_param" != "" ]; then
- comp_param="${comp_param},"
- fi
- if [ "$is_encoder" == "true" ]; then
- comp_param="${comp_param}0"
- else
- comp_param="${comp_param}1"
- fi
- fi
- if [ -n "$output_multi" ]; then
- output[$i]=$(echo ${output_multi} | cut -d',' -f$(($i+1)))
- fi
- if [ -n "$stream_endian_multi" ]; then
- stream_endian_temp=$(echo ${stream_endian_multi} | cut -d',' -f$(($i+1)))
- fi
- if [ -n "$frame_endian_multi" ]; then
- frame_endian_temp=$(echo ${frame_endian_multi} | cut -d',' -f$(($i+1)))
- fi
- if [ -n "$slice_height_multi" ]; then
- slice_height_temp=$(echo ${slice_height_multi} | cut -d',' -f$(($i+1)))
- fi
- if [ -n "$g_enable_slice_intr_multi" ]; then
- g_enable_slice_intr_temp=$(echo ${g_enable_slice_intr_multi} | cut -d',' -f$(($i+1)))
- fi
- if [ -n "$pixel_just_multi" ]; then
- pixel_just_temp=$(echo ${pixel_just_multi} | cut -d',' -f$(($i+1)))
- fi
- if [ -n "$bs_size_multi" ]; then
- bs_size_temp=$(echo ${bs_size_multi} | cut -d',' -f$(($i+1)))
- fi
- if [ -n "$g_tiled_mode_multi" ]; then
- g_tiled_mode_temp=$(echo ${g_tiled_mode_multi} | cut -d',' -f$(($i+1)))
- fi
- if [ -n "$jpeg_12bit_multi" ]; then
- jpeg_12bit=$(echo ${jpeg_12bit_multi} | cut -d',' -f$(($i+1)))
- fi
- ################################################################################
- # read from cfg file name #
- ################################################################################
- if [[ $filename == *"12b"* ]]; then
- echo "set jpeg_12bit from cfg file name"
- jpeg_12bit=1
- fi
- if [[ $filename == *"tiled"* ]]; then
- echo "set g_tiled_mode from cfg file name"
- g_tiled_mode_temp=1
- fi
- ################################################################################
- # make argc & argv parameter #
- ################################################################################
- generate_parameters $input_path $is_encoder
- if [ "$is_encoder" == "true" ]; then
- ################################################################################
- # Create Input YUV data for tiledMode #
- ################################################################################
- if [ "$g_tiled_mode" == "1" ]; then
- generate_input_yuv ${input_path}
- result=$?
- if [ "$result" != "0" ]; then
- log_conf "failed to create yuv file $input_path" $conf_log_path
- log_conf "[RESULT] FAILURE" $conf_log_path
- echo "failed to create yuv file $input_path" >> $conf_err_log_path
- echo "[RESULT] FAILURE" >> $conf_err_log_path
- continue
- fi
- fi
- fi
- ################################################################################
- # Golden Data #
- ################################################################################
- log_conf "--------------------------------------------------------------------------------" ${temp_log_path}
- if [ "$is_encoder" == "true" ]; then
- generate_golden_stream $filename ${golden[$i]}
- else
- if [ "$jpeg_12bit" == "1" ]; then
- g_jpeg_12bit="true"
- else
- g_jpeg_12bit="false"
- fi
- generate_golden_yuv $input_path ${golden[$i]}
- fi
- result=$?
- log_conf "--------------------------------------------------------------------------------" ${temp_log_path}
- if [ $result -ne 0 ]; then
- exit $result
- fi
- ################################################################################
- # make test param
- ################################################################################
- is_encoder[$i]=0 #encoder
- if [ "$i" = "0" ]; then
- codec_std_test_param="${is_encoder[$i]}"
- stream_test_param="${filename}"
- if [ -n ${output[$i]} ]; then
- output_test_param="${output[$i]}"
- fi
- stream_endian_test_param="${g_stream_endian}"
- frame_endian_test_param="${g_frame_endian}"
- bs_size_test_param="${g_bs_size}"
- slice_height_test_param="${g_slice_height}"
- slice_intr_test_param="${g_enable_slice_intr}"
- tiled_mode_test_param="${g_tiled_mode}"
- jpeg_12bit_test_param="${jpeg_12bit}"
- pixelj_test_param="${g_pixel_just}"
- else
- codec_std_test_param="${codec_std_test_param},${is_encoder[$i]}"
- stream_test_param="${stream_test_param},${filename}"
- if [ -n ${output[$i]} ]; then
- output_test_param="${output_test_param},${output[$i]}"
- fi
- stream_endian_test_param="${stream_endian_test_param},${g_stream_endian}"
- frame_endian_test_param="${frame_endian_test_param},${g_frame_endian}"
- bs_size_test_param="${bs_size_test_param},${g_bs_size}"
- slice_height_test_param="${slice_height_test_param},${g_slice_height}"
- slice_intr_test_param="${slice_intr_test_param},${g_enable_slice_intr}"
- tiled_mode_test_param="${tiled_mode_test_param},${g_tiled_mode}"
- jpeg_12bit_test_param="${jpeg_12bit_test_param},${jpeg_12bit}"
- pixelj_test_param="${pixelj_test_param},${g_pixel_just}"
- fi
- ################################################################################
- # print information #
- ################################################################################
- log_conf "--------------------------------------------------------------------------------" ${temp_log_path}
- log_conf "RANDOM TEST : ${ON_OFF[$g_random_test]}" $temp_log_path
- log_conf "INSTANCE NUM : $i" $temp_log_path
- log_conf "CFG : $filename " $temp_log_path
- log_conf "ENDIAN : STREAM($g_stream_endian) FRAME($g_frame_endian)" $temp_log_path
- log_conf "STANDARD : JPEG" $temp_log_path
- log_conf "CBCR interleave: ${ON_OFF[$g_cbcr_interleave]}" $temp_log_path
- log_conf "PIXEL JUST. : ${JUSTIFY_NAME[$g_pixel_just]}" $temp_log_path
- log_conf "TILED MODE : ${ON_OFF[$g_tiled_mode]}" $temp_log_path
- log_conf "WIDTH : $cfg_width" $temp_log_path
- log_conf "HEIGHT : $cfg_height" $temp_log_path
- log_conf "SLICE_HEIGHT : $g_slice_height" $temp_log_path
- log_conf "EN_SLICE_INTR : $g_enable_slice_intr" $temp_log_path
- log_conf "BS SIZE : $g_bs_size" $temp_log_path
- log_conf "--------------------------------------------------------------------------------" ${temp_log_path}
- done
- if [ "$in_comp_param" != "" ]; then
- comp_param="$in_comp_param"
- fi
- test_param="-e ${comp_param} $g_w_param $g_fsdb_param $g_ius_param"
- test_param="${test_param} --instance-num=${instance_num} --cfg-dir=$cfg_dir --yuv-dir=$yuv_dir"
- test_param="${test_param} --stream-endian=${stream_endian_test_param}"
- test_param="${test_param} --frame-endian=${frame_endian_test_param} --bs-size=${bs_size_test_param}"
- test_param="${test_param} --pixelj=${pixelj_test_param}"
- test_param="${test_param} --slice-height=${slice_height_test_param}"
- test_param="${test_param} --enable-slice-intr=${slice_intr_test_param}"
- test_param="${test_param} --enable-tiledMode=${tiled_mode_test_param}"
- test_param="${test_param} --input=${stream_test_param} --output=${output_test_param}"
- if [ "$simulation" == "true" ]; then
- test_param="${test_param} --TestRunner=1"
- fi
- success_count=0
- failure_count=0
- ################################################################################
- ################################################################################
- # Test Mode Thread #
- ################################################################################
- ################################################################################
- result=0
- log_conf "--------------------------------------------------------------------------------" ${temp_log_path}
- log_conf "MultiInstance test : Thread" ${temp_log_path}
- log_conf "--------------------------------------------------------------------------------" ${temp_log_path}
- for ((i=0;i<$instance_num;i++)); do
- log_conf "[${i}/${instance_num}] ${stream[$i]}" ${temp_log_path}
- if [ -e ${output[$i]} ]; then
- rm -rf ${output[$i]}
- fi
- done
- log_conf "--------------------------------------------------------------------------------" ${temp_log_path}
- cat $temp_log_path >> $conf_log_path
- echo "$test_exec $test_param"
- if [ "$simulation" == "true" ]; then
- $test_exec $test_param 2>&1 | tee -a $conf_log_path
- else
- echo "$test_exec $test_param"
- exit #samin
- #$test_exec $test_param
- fi
- if [ $result -eq 0 ]; then
- log_conf "---------------- COMPARE ------------------" $conf_log_path
- for ((i=0;i<$instance_num;i++)); do
- log_conf "cmp ${output[$i]} ${golden[$i]}" $conf_log_path
- cmp ${output[$i]} ${golden[$i]} 2>&1 | tee -a $conf_log_path > /dev/null #save the log
- cmp ${output[$i]} ${golden[$i]} #get the result & show log
- if [ "$?" != "0" ]; then
- log_conf "[RESULT] COMPARE FAIL" $conf_log_path
- result=1
- fi
- done
- if [ $result -eq 0 ]; then
- log_conf "[RESULT] SUCCESS" $conf_log_path
- success_count=$(($success_count + 1))
- fi
- fi
- if [ $result -eq 1 ]; then
- log_conf "[RESULT] FAILURE" $conf_log_path
- failure_count=$(($failure_count + 1))
- cat $temp_log_path >> $conf_err_log_path
- cat ./ErrorLog.txt >> $conf_err_log_path
- echo "[RESULT] FAILURE" >> $conf_err_log_path
- if [ $result -eq 10 ]; then
- echo "Abnormal exit!!!"
- break
- fi
- fi
- echo "TEST_CONDITION: $0 $test_param"
- # clear temp log
- echo "" > $temp_log_path
- ################################################################################
- # Create Test Log #
- ################################################################################
- endTime=$(date +%s%N)
- elapsed=$((($endTime - $beginTime) / 1000000000))
- elapsedH=$(($elapsed / 3600))
- elapsedS=$(($elapsed % 60))
- elapsedM=$(((($elapsed - $elapsedS) / 60) % 60))
- if [ "$((elapsedS / 10))" == "0" ]; then elapsedS="0${elapsedS}" ;fi
- if [ "$((elapsedM / 10))" == "0" ]; then elapsedM="0${elapsedM}" ;fi
- if [ "$((elapsedH / 10))" == "0" ]; then elapsedH="0${elapsedH}" ;fi
- if [ $elapsed -le 60 ]; then
- time_hms="{color:red}*${elapsedH}:${elapsedM}:${elapsedS}*{color}"
- else
- time_hms="${elapsedH}:${elapsedM}:${elapsedS}"
- fi
- log_filename=$(basename $conf_log_path)
- log_err_filename=$(basename $conf_err_log_path)
- if [ "$failure_count" == "0" ] && [ "$instance_num" != "0" ]; then
- pass=${PASS}
- rm $conf_err_log_path
- log_err_filename=""
- else
- pass=${FAIL}
- fi
- wiki_log="| $streamset_file | 1 | $success_count | $failure_count | 0 | $log_filename | ${log_err_filename} | $pass | $time_hms | | | Inst Num = $instance_num |"
- echo $wiki_log
- echo $wiki_log >> $wiki_log_file
- if [ "$instance_num" == "0" ]; then
- echo "instance_num: $instance_num = exit 1"
- exit 1
- fi
- exit $failure_count
|