123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546 |
- #!/bin/bash
- source TestRunnerCommon.sh
- # Global varaibles for decoder option
- fail_stop=0
- refc_exec="Nieuport_JpgDec"
- bin_dir="./"
- stream_dir="./stream"
- wiki_log_file="./log/dec_confluence.log"
- g_random_test="false";
- jenkins=""
- txt_param_switch=0
- output_path="output_fpga.yuv"
- default_yuv_fmt=""
- default_subsample="none"
- default_ordering="none"
- simulation="false"
- default_bssize=5242880 # 5MB
- MAX_BS_SIZE=10485760 # 10MB, You can allocate more memory.
- MIN_BS_SIZE=8192 # 8KB
- g_random_test="false"
- g_slice_height=0
- g_enable_slice_intr=0
- default_read_delay=
- default_write_delay=
- fmt_test_400_list=("none" "420p" "422p" "444p" "nv12" "nv21" "nv16" "nv61" "nv24" "nv42" "yuyv" "yvyu" "uyvy" "vyuy")
- fmt_test_420_list=("none" "420p" "422p" "444p" "nv12" "nv21" "nv16" "nv61" "nv24" "nv42" "yuyv" "yvyu" "uyvy" "vyuy")
- fmt_test_422_list=("none" "420p" "422p" "444p" "nv12" "nv21" "nv16" "nv61" "nv24" "nv42" "yuyv" "yvyu" "uyvy" "vyuy")
- fmt_test_440_list=("none" "420p" "422p" "444p" "nv12" "nv21" "nv16" "nv61" "nv16v" "nv61v" "nv24" "nv42" "yuyv" "yvyu" "uyvy" "vyuy")
- fmt_test_444_list=("none" "420p" "422p" "444p" "nv12" "nv21" "nv16" "nv61" "nv24" "nv42" "yuyv" "yvyu" "uyvy" "vyuy" "ayuv")
- fmt_test_400_num=${#fmt_test_400_list[@]}
- fmt_test_420_num=${#fmt_test_420_list[@]}
- fmt_test_422_num=${#fmt_test_422_list[@]}
- fmt_test_440_num=${#fmt_test_440_list[@]}
- fmt_test_444_num=${#fmt_test_444_list[@]}
- MAX_OUTPUT_FMT=$((${#SUPPORTED_YUV_FMT[@]} -1))
- function help {
- echo ""
- echo "-------------------------------------------------------------------------------"
- echo "Chips&Media conformance Tool v2.0"
- echo "All copyright reserved by Chips&Media"
- echo "-------------------------------------------------------------------------------"
- echo "$0 OPTION streamlist_file"
- echo "-h help"
- echo "-n num number of frames."
- echo "--enable-random generate random option."
- echo "--bin-dir ref-c directory, default: ./"
- echo "--stream-dir stream directory"
- echo "--12bit input stream is an extended sequential jpeg"
- 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 "--pixelj 16bit-pixel justification. 0(default) - msb justified, 1 - lsb justified in little-endianness"
- echo "--subsample conversion sub-sample(ignore case: NONE, 420, 422, 444";
- echo "--ordering conversion ordering(ingore-case: NONE, NV12, NV21, YUYV, YVYU, UYVY, VYUY, AYUV";
- echo " NONE - planar format";
- echo " NV12, NV21 - semi-planar format for all the subsamples.";
- echo " If subsample isn't defined or is none, the sub-sample depends on jpeg information";
- echo " The subsample 440 can be converted to the semi-planar format. It means that the encoded sub-sample should be 440.";
- echo " YUVV..VYUY - packed format. subsample be ignored.";
- echo " AYUV - 444 packed format. subsample be ignored.";
- echo "--scaleH Horizontal downscale: 0(none), 1(1/2), 2(1/4), 3(1/8)";
- echo "--scaleV Vertical downscale : 0(none), 1(1/2), 2(1/4), 3(1/8)";
- echo "--rotation 0, 90, 180, 270 CCW"
- echo "--mirror 0, 1(vertical), 2(horizontal), 3(both)"
- }
- function generate_parameters {
- local val=0
- local list
- g_stream_endian=$(gen_val 0 3 $default_stream_endian)
- if [ "$g_jpeg_12bit" == "true" ]; then
- g_frame_endian=$(gen_val 0 7 $default_frame_endian)
- else
- g_frame_endian=$(gen_val 0 3 $default_frame_endian)
- fi
- # PPU AND SCALER
- if [ "$g_random_test" == "true" ]; then
- ppu_random=$(gen_val 0 1) # 0 - rotation/mirror, 1 - scaler
- if [ "$ppu_random" == "0" ]; then
- g_rotation=$(gen_val_angle $default_rotation)
- g_mirror=$(gen_val 0 3 $default_mirror)
- g_scale_h=0
- g_scale_v=0
- elif [ "$ppu_random" == "1" ]; then
- g_rotation=0
- g_mirror=0
- g_scale_h=$(gen_val 0 3 $default_scaleH)
- g_scale_v=$(gen_val 0 3 $default_scaleV)
- fi
- else
- g_rotation=$(gen_val_angle $default_rotation)
- g_mirror=$(gen_val 0 3 $default_mirror)
- g_scale_h=$(gen_val 0 3 $default_scaleH)
- g_scale_v=$(gen_val 0 3 $default_scaleV)
- if [ "$g_rotation" != "0" ] || [ "$g_mirror" != "0" ]; then
- if [ "$g_scale_h" != "0" ] || [ "$g_scale_h" != "0" ]; then
- echo "The PPU(rotator and mirror) doesn't work with the down-scaler"
- echo "rotation: $g_rotation, mirror: $mirror, scale-H: $g_scale_h, scale-V: $g_scale_v"
- exit 1
- fi
- fi
- fi
- # SUBSAMPLE AND ORDERING
- if [ "$g_random_test" == "true" ]; then
- default_yuv_fmt="-99"
- fi
- if [ "$default_yuv_fmt" == "-99" ]; then
- case $g_orig_fmt in
- 400) list=(${fmt_test_400_list[@]});;
- 420) list=(${fmt_test_420_list[@]});;
- 422) list=(${fmt_test_422_list[@]});;
- 440) list=(${fmt_test_440_list[@]});;
- 444) list=(${fmt_test_444_list[@]});;
- esac
- max_fmt_num=${#list[@]}
- val=$(gen_val 0 $((max_fmt_num-1)))
- output_format="${list[$val]}"
- # generate subsample and ordering parameter for ref-sw
- convert_fmt_val_for_refsw $output_format $g_orig_fmt
- else
- g_subsample="$default_subsample"
- g_ordering="$default_ordering"
- fi
- if [ "$g_rotation" != "0" ] || [ "$g_mirror" != "0" ]; then
- # color format converter and rotator cannot work together.
- if [ "$g_subsample" != "none" ]; then
- g_subsample="none"
- fi
- if [ "$g_ordering" != "nv12" ] && [ "$g_ordering" != "nv21" ]; then
- g_ordering="none"
- fi
- fi
- g_bs_size=$(gen_val $MIN_BS_SIZE $MAX_BS_SIZE $default_bssize)
- g_bs_size=$((($g_bs_size + 4095) & ~4095))
- g_pixel_just=$(gen_val 0 1 $default_pixelj)
- # generate -pn -pk and -v options for c-model
- convert_fmt_val_for_cmodel $g_subsample $g_orig_fmt $g_ordering
- }
- function build_test_param {
- local param=""
- param="$param --rotation=$g_rotation"
- param="$param --mirror=$g_mirror"
- param="$param --stream-endian=$g_stream_endian --frame-endian=$g_frame_endian"
- param="$param --subsample=$g_subsample --ordering=$g_ordering"
- param="$param --scaleH=$g_scale_h"
- param="$param --scaleV=$g_scale_v"
- param="$param --bs-size=$g_bs_size"
- param="$param --pixelj=$g_pixel_just"
- if [ "$simulation" == "true" ]; then
- param="$param $g_fsdb_param --TestRunner=1"
- fi
- g_func_ret_str="$param"
- }
- function get_yuv_format {
- local format=""
- local cmd="${bin_dir}/${refc_exec} -i $1 -m 1"
- if [ "$g_jpeg_12bit" == "true" ]; 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
- format="$value"
- break;
- fi
- done < result.txt
- echo "$format"
- }
- ################################################################################
- # Parse arguments #
- ################################################################################
- OPTSTRING="-o hw: -l enable-random,stream-dir:,bin-dir:"
- OPTSTRING="${OPTSTRING},stream-endian:,frame-endian:"
- OPTSTRING="${OPTSTRING},slice-height:,enable-slice-intr:,subsample:,ordering:,output:,input:,bs-size:"
- OPTSTRING="${OPTSTRING},scaleH:,scaleV:,rotation:,mirror:"
- OPTSTRING="${OPTSTRING},12bit,pixelj:"
- OPTS=`getopt $OPTSTRING -- "$@"`
- if [ $? -ne 0 ]; then
- exit 1
- fi
- eval set -- "$OPTS"
- while true; do
- case "$1" in
- -h)
- help
- exit 1
- shift;;
- --bin-dir)
- bin_dir=$2
- shift 2;;
- --enable-random)
- g_random_test="true"
- shift;;
- --stream-dir)
- echo "stream-dir"
- stream_dir=$2
- shift 2;;
- --stream-endian)
- default_stream_endian=$2
- shift 2;;
- --frame-endian)
- default_frame_endian="$2"
- shift 2;;
- --12bit)
- g_jpeg_12bit="true"
- shift;;
- --pixelj)
- default_pixelj="$2"
- shift 2;;
- --input)
- streamset_path="$2"
- shift 2;;
- --output)
- output_path="$2"
- shift 2;;
- --subsample)
- default_subsample="$2"
- shift 2;;
- --ordering)
- default_ordering="$2"
- shift 2;;
- --scaleH)
- default_scaleH="$2"
- shift 2;;
- --scaleV)
- default_scaleV="$2"
- shift 2;;
- --rotation)
- default_rotation="$2"
- shift 2;;
- --mirror)
- default_mirror="$2"
- shift 2;;
- --bs-size)
- default_bssize="$2"
- shift 2;;
- --)
- shift
- break;;
- esac
- done
- shift $(($OPTIND - 1))
- 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"
- else
- DEFAULT_ACLK=20
- DEFAULT_CCLK=20
- test_exec="./jpg_dec_test"
- fi
- ################################################################################
- # Get param from target text file #
- ################################################################################
- name_value=()
- input_param_name="TestRunnerParamCodaJ12Dec.txt"
- if [ -f $input_param_name ]; then
- while read line; do
- # remove right comment
- line="${line%%\#*}"
- if [ "$line" = "" ]; then continue; fi
- OIFS=$IFS
- IFS='='
- count=0
- for word in $line; do
- word=${word// /}
- name_value[$count]="$word"
- count=$(($count+1))
- done
- IFS=$OIFS
- attr="${name_value[0]}"
- value="${name_value[1]}"
- case "$attr" in
- default) default_opt="$value";;
- aclk) [ ! -z $default_aclk ] || default_aclk="$value";;
- cclk) [ ! -z $default_cclk ] || default_cclk="$value";;
- n) g_frame_num="-n $value";;
- fake_test) fake_test="$value";;
- stream-endian) [ ! -z $default_stream_endian ] || default_stream_endian="$value";;
- frame-endian) [ ! -z $default_frame_endian ] || default_frame_endian="$value";;
- scaleH) [ ! -z $default_scaleH ] || default_scaleH="$value";;
- scaleV) [ ! -z $default_scaleV ] || default_scaleV="$value";;
- rotation) [ ! -z $default_rotation ] || default_rotation="$value";;
- mirror) [ ! -z $default_mirror ] || default_mirror="$value";;
- pixelj) [ ! -z $default_pixelj ] || default_pixelj="$value";;
- slice-height) [ ! -z $default_slice_height ] || default_slice_height="$value";;
- enable-slice-intr) [ ! -z $default_slice_int ] || default_slice_int="$value";;
- txt-param) txt_param_switch=1;;
- *) ;;
- esac
- done < $input_param_name
- else
- if [ ! -f $input_param_name ]; then
- echo "$input_param_name file doesn't exist";
- fi
- fi
- # SET DEFAULT VALUES
- if [ "$g_random_test" != "true" ]; then
- [ ! -z $default_aclk ] || default_aclk=$DEFAULT_ACLK
- [ ! -z $default_cclk ] || default_cclk=$DEFAULT_CCLK
- [ ! -z $default_stream_endian ] || default_stream_endian=0
- [ ! -z $default_frame_endian ] || default_frame_endian=0
- [ ! -z $default_scaleH ] || default_scaleH=0
- [ ! -z $default_scaleV ] || default_scaleV=0
- [ ! -z $default_rotation ] || default_rotation=0
- [ ! -z $default_mirror ] || default_mirror=0
- [ ! -z $default_slice_int ] || default_slice_int=0
- [ ! -z $default_slice_height ] || default_slice_height=0
- [ ! -z $default_pixelj ] || default_pixelj=0
- else
- default_slice_int=0
- default_slice_height=0
- fi
- if [ -z $streamset_path ]; then
- streamset_path=$1
- fi
- streamset_file=`basename ${streamset_path}`
- ################################################################################
- # count stream number #
- ################################################################################
- stream_file_array=()
- ext="${streamset_file##*.}"
- ext=$(tr '[:upper:]' '[:lower:]' <<< $ext)
- single_file="false"
- if [ "$ext" == "jpg" ] || [ "$ext" == "jpeg" ]; then
- stream_file_array[0]="$streamset_path"
- single_file="true"
- else
- if [ ! -e "${streamset_path}" ]; then
- echo "No such file: ${streamset_path}"
- exit 1
- fi
- parse_streamset_file $streamset_path stream_file_array
- fi
- num_of_streams=${#stream_file_array[@]}
- count=1
- success_count=0
- failure_count=0
- remain_count=${num_of_streams}
- basedir=${basedir//\/} # remove last delimeter
- mkdir -p temp
- mkdir -p output
- mkdir -p log/decoder_conformance
- conf_log_path="log/decoder_conformance/${streamset_file}.log"
- conf_err_log_path="log/decoder_conformance/${streamset_file}_error.log"
- temp_log_path="./temp/temp.log"
- # truncate contents of log file
- echo "" > $conf_log_path
- echo "" > $conf_err_log_path
- echo "" > $temp_log_path
- beginTime=$(date +%s%N)
- ################################################################################
- # read cmd file. #
- ################################################################################
- for (( c=0; c< $num_of_streams ; c++ )) do
- line=${stream_file_array[$c]}
- if [ "$single_file" == "true" ]; then
- stream="${line}"
- else
- stream="${stream_dir}/${line}"
- fi
- log_conf "--------------------------------------------------------------------------------" ${temp_log_path}
- log_conf "[${count}/${num_of_streams}] ${stream}" ${temp_log_path}
- log_conf "--------------------------------------------------------------------------------" ${temp_log_path}
- if [ ! -f $stream ]; then
- log_conf "Not found $stream" $temp_log_path
- log_conf "[RESULT] FAILURE" $temp_log_path
- echo "Not found $stream" >> $conf_err_log_path
- echo "[RESULT] FAILURE" >> $conf_err_log_path
- cat $temp_log_path >> $conf_log_path
- failure_count=$(($failure_count + 1))
- remain_count=$(($remain_count - 1))
- count=$(($count + 1))
- continue
- fi
- result=0
- target_stream=$stream
- ################################################################################
- # make argc & argv parameter #
- ################################################################################
- if [ $result -eq 0 ]; then
- g_orig_fmt=$(get_yuv_format $target_stream)
- generate_parameters
- build_test_param
- test_param="$g_func_ret_str"
- ################################################################################
- # Golden YUV #
- ################################################################################
- golden_yuv_path="output_refc.yuv"
- generate_golden_yuv $stream $golden_yuv_path
- result=$?
- ################################################################################
- # print information #
- ################################################################################
- if [ $result -eq 0 ]; then
- log_conf "RANDOM TEST : $g_random_test" $temp_log_path
- log_conf "ENDIAN : STREAM($g_stream_endian) FRAME($g_frame_endian)" $temp_log_path
- log_conf "SUBSAMPLE : $g_subsample" $temp_log_path
- log_conf "ORDERING : $g_ordering" $temp_log_path
- log_conf "ROTATE : $g_rotation" $temp_log_path
- log_conf "MIRROR : ${MIRROR_NAME[$g_mirror]}" $temp_log_path
- log_conf "SCALE DOWN : H: ${SCALEDOWN_NAME[$g_scale_h]} V: ${SCALEDOWN_NAME[$g_scale_v]}" $temp_log_path
- log_conf "PIXEL_JUST. : ${JUSTIFY_NAME[$g_pixel_just]}" $temp_log_path
- rm -f output_fpga.yuv
- cmd="$test_exec $test_param --output=$output_path --input=$target_stream"
- cmd_log="$test_exec $test_param --output=$output_path --input=$stream"
- log_conf "$cmd_log" $temp_log_path
- cat $temp_log_path >> $conf_log_path
- if [ "$fake_test" == "1" ]; then
- echo "<< Testing just script >>"
- else
- exit
- $cmd
- result=$?
- if [ "$result" == "0" ]; then
- cmp $output_path output_refc.yuv
- if [ "$?" != "0" ]; then
- result=1
- fi
- fi
- fi
- fi
- else
- cat $temp_log_path >> $conf_log_path
- fi
- if [ $result -eq 0 ]; then
- log_conf "[RESULT] SUCCESS" $conf_log_path
- success_count=$(($success_count + 1))
- else
- cat ./ErrorLog.txt >> $conf_log_path
- 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 "cmp $stream $target_stream"
- cmp $stream $target_stream
- echo "[RESULT] FAILURE" >> $conf_err_log_path
- if [ $result -eq 10 ]; then
- echo "Abnormal exit!!!"
- break
- fi
- fi
- remain_count=$(($remain_count - 1))
- count=$(($count + 1))
- # clear temp log
- echo "" > $temp_log_path
- # delete temporal input file
- if [ $fail_stop -eq 1 ] && [ $result -ne 0 ]; then
- break;
- fi
- done
- 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 ] && [ $num_of_streams != 0 ]; then
- pass=${PASS}
- rm $conf_err_log_path
- log_err_filename=""
- else
- pass=${FAIL}
- fi
- wiki_log="| $streamset_file | $num_of_streams | $success_count | $failure_count | $remain_count | $log_filename | ${log_err_filename} | $pass | $time_hms | | | |"
- echo $wiki_log
- echo $wiki_log >> $wiki_log_file
- if [ "$num_of_streams" == "0" ]; then
- echo "num_of_streams: $num_of_streams = exit 1"
- exit 1
- fi
- exit $failure_count
|