| @@ -1,430 +1,442 @@ |
| 1 | #!/bin/bash | 1 | #!/bin/bash |
| 2 | #******************************************************************************* | 2 | #*************************************************************************************************************** |
| 3 | # Encoder binary comparison test model | 3 | # Encoder binary comparison test model |
| 4 | # -- Compared with Benchmark version using SHA-1 string | 4 | # -- Compared with Benchmark version using SHA-1 string |
| 5 | # -- Test bit stream under folder openh264/res | 5 | # -- Test bit stream under folder openh264/res |
| 6 | # -- SHA-1 string of Benchmark version for all cases of all bit streams | 6 | # -- SHA-1 string of Benchmark version for all cases of all bit streams |
| 7 | # under folder openh264/test/encoder_binary_comparion/SHA1Table | 7 | # under folder openh264/test/encoder_binary_comparion/SHA1Table |
| 8 | # -- For more detail,please refer to file AboutTest?¡ê | 8 | # -- For more detail,please refer to file AboutTest?¡ê |
| 9 | #brief: | 9 | #brief: |
| 10 | # -- Test all cases in SHA1TableFile | 10 | # -- Test all cases in SHA1TableFile |
| 11 | # 1) Generate SHA1 string for each case | 11 | # 1) Generate SHA1 string for each case |
| 12 | # 2) Compare with benchmark SHA1 string | 12 | # 2) Compare with benchmark SHA1 string |
| 13 | # 3) If the SHA1 string are the same with benchmark version, test case is marked as passed | 13 | # 3) If the SHA1 string are the same with benchmark version, test case is marked as passed |
| 14 | # 4) Otherwise, test case is marked as unpass! this may caused by: | 14 | # 4) Otherwise, test case is marked as unpass! this may caused by: |
| 15 | # --the design of encoder has been changed and the bit stream also change | 15 | # --the design of encoder has been changed and the bit stream also change |
| 16 | # --there may be some bugs in encoder and bit stream is not right | 16 | # --there may be some bugs in encoder and bit stream is not right |
| 17 | # -- Usage: ./run_BinarySHA1Comparison.sh ${TestYUVName} ${AllCaseSHA1TaleFile} | 17 | # -- Usage: ./run_BinarySHA1Comparison.sh ${TestYUVName} ${AllCaseSHA1TaleFile} |
| 18 | # | 18 | # |
| 19 | # date: 10/06/2014 Created | 19 | # date: 10/06/2014 Created |
| 20 | #******************************************************************************* | 20 | #*************************************************************************************************************** |
| 21 | #global variable definition | 21 | #global variable definition |
| 22 | #usage runGlobalVariableDef | 22 | #usage runGlobalVariableDef |
| 23 | runGlobalVariableDef() | 23 | runGlobalVariableDef() |
| 24 | { | 24 | { |
| 25 | WorkingDirDir="" | 25 | WorkingDirDir="" |
| 26 | #test data space | 26 | #test data space |
| 27 | FinalResultPath="" | 27 | FinalResultPath="" |
| 28 | IssueDataPath="" | 28 | IssueDataPath="" |
| 29 | TempDataPath="" | 29 | TempDataPath="" |
| 30 | #for test sequence info | 30 | #for test sequence info |
| 31 | TestSequenceName="" | 31 | TestSequenceName="" |
| 32 | PicW="" | 32 | PicW="" |
| 33 | PicH="" | 33 | PicH="" |
| 34 | #test cfg file and test info output file | 34 | #test cfg file and test info output file |
| 35 | ConfigureFile="" | 35 | ConfigureFile="" |
| 36 | AllCaseFile="" | 36 | AllCaseFile="" |
| 37 | #xxx.csv | 37 | #xxx.csv |
| 38 | AllCasePassStatusFile="" | 38 | AllCasePassStatusFile="" |
| 39 | #for encoder command | 39 | #for encoder command |
| 40 | declare -a aEncoderCommandSet | 40 | declare -a aEncoderCommandSet |
| 41 | declare -a aEncoderCommandName | 41 | declare -a aEncoderCommandName |
| 42 | declare -a aEncoderCommandValue | 42 | declare -a aEncoderCommandValue |
| 43 | declare -a aRecYUVFileList | 43 | declare -a aRecYUVFileList |
| 44 | #encoder parameters change based on the case info | 44 | #encoder parameters change based on the case info |
| 45 | let "EncoderFlag = 0" | 45 | let "EncoderFlag = 0" |
| 46 | CaseInfo="" | 46 | CaseInfo="" |
| 47 | BitStreamFile="" | 47 | BitStreamFile="" |
| 48 | DiffFlag="" | 48 | DiffFlag="" |
| 49 | #pass number | 49 | #pass number |
| 50 | TotalCaseNum="" | 50 | TotalCaseNum="" |
| 51 | PassCaseNum="" | 51 | PassCaseNum="" |
| 52 | UnpassCaseNum="" | 52 | UnpassCaseNum="" |
| 53 | } | 53 | } |
| 54 | #called by runGlobalVariableInitial | 54 | #called by runGlobalVariableInitial |
| 55 | #usage runEncoderCommandInital | 55 | #usage runEncoderCommandInital |
| 56 | runEncoderCommandInital() | 56 | runEncoderCommandInital() |
| 57 | { | 57 | { |
| 58 | aEncoderCommandSet=( -utype -frms -numl -numtl \ | 58 | |
| 59 | -sw -sh "-dw 0" "-dh 0" "-dw 1" "-dh 1" "-dw 2" "-dh 2" "-dw 3" "-dh 3" \ | 59 | aEncoderCommandSet=( -utype -frms -numl -numtl \ |
| 60 | "-frout 0" "-frout 1" "-frout 2" "-frout 3" \ | 60 | -sw -sh "-dw 0" "-dh 0" "-dw 1" "-dh 1" "-dw 2" "-dh 2" "-dw 3" "-dh 3" \ |
| 61 | "-lqp 0" "-lqp 1" "-lqp 2" "-lqp 3" \ | 61 | "-frout 0" "-frout 1" "-frout 2" "-frout 3" \ |
| 62 | -rc -tarb "-ltarb 0" "-ltarb 1" "-ltarb 2" "-ltarb 3" \ | 62 | "-lqp 0" "-lqp 1" "-lqp 2" "-lqp 3" \ |
| 63 | "-slcmd 0" "-slcnum 0" "-slcmd 1" "-slcnum 1"\ | 63 | -rc -fs -tarb "-ltarb 0" "-ltarb 1" "-ltarb 2" "-ltarb 3" \ |
| 64 | "-slcmd 2" "-slcnum 2" "-slcmd 3" "-slcnum 3"\ | 64 | "-slcmd 0" "-slcnum 0" "-slcmd 1" "-slcnum 1"\ |
| 65 | -nalsize \ | 65 | "-slcmd 2" "-slcnum 2" "-slcmd 3" "-slcnum 3"\ |
| 66 | -iper -thread -ltr \ | 66 | -nalsize \ |
| 67 | -db -denois -scene -bgd -aq ) | 67 | -iper -thread -ltr \ |
| 68 | aEncoderCommandName=(usagetype frms numl numtl \ | 68 | -db -denois -scene -bgd -aq ) |
| 69 | sw sh dw0 dh0 dw1 dh1 dw2 dh2 dw3 dh3 \ | 69 | |
| 70 | frout0 frout1 frout2 frout3 \ | 70 | aEncoderCommandName=(usagetype frms numl numtl \ |
| 71 | lqp0 lqp1 lqp2 lqp3 \ | 71 | sw sh dw0 dh0 dw1 dh1 dw2 dh2 dw3 dh3 \ |
| 72 | rc tarb ltarb0 ltarb1 ltarb2 ltarb3 \ | 72 | frout0 frout1 frout2 frout3 \ |
| 73 | slcmd0 slcnum0 slcmd1 slcnum1 \ | 73 | lqp0 lqp1 lqp2 lqp3 \ |
| 74 | slcmd2 slcnum2 slcmd3 slcnum3 \ | 74 | rc FrSkip tarb ltarb0 ltarb1 ltarb2 ltarb3 \ |
| 75 | MaxNalSZ \ | 75 | slcmd0 slcnum0 slcmd1 slcnum1 \ |
| 76 | iper thread ltr \ | 76 | slcmd2 slcnum2 slcmd3 slcnum3 \ |
| 77 | db denois scene bgd aq ) | 77 | MaxNalSZ \ |
| 78 | NumParameter=${#aEncoderCommandSet[@]} | 78 | iper thread ltr \ |
| 79 | for ((i=0;i<NumParameter; i++)) | 79 | db denois scene bgd aq ) |
| 80 | do | 80 | |
| 81 | aEncoderCommandValue[$i]=0 | 81 | |
| 82 | done | 82 | NumParameter=${#aEncoderCommandSet[@]} |
| | 83 | for ((i=0;i<NumParameter; i++)) |
| | 84 | do |
| | 85 | aEncoderCommandValue[$i]=0 |
| | 86 | done |
| 83 | | 87 | |
| 84 | } | 88 | } |
| 85 | runGlobalVariableInitial() | 89 | runGlobalVariableInitial() |
| 86 | { | 90 | { |
| 87 | #TestSpaceDir=../AllTestData CurrentDir=../AllTestData/TestSetXXX/***.264 eg ../AllTestData/TestSetCIF/BA1_MWD.264 | 91 | #TestSpaceDir=../AllTestData CurrentDir=../AllTestData/TestSetXXX/***.264 eg ../AllTestData/TestSetCIF/BA1_MWD.264 |
| 88 | CurrentDir=`pwd` | 92 | CurrentDir=`pwd` |
| 89 | #test data space | 93 | #test data space |
| 90 | FinalResultPath="${CurrentDir}/result" | 94 | FinalResultPath="${CurrentDir}/result" |
| 91 | IssueDataPath="${CurrentDir}/issue" | 95 | IssueDataPath="${CurrentDir}/issue" |
| 92 | TempDataPath="TempData" | 96 | TempDataPath="TempData" |
| 93 | TestSequencePath="${CurrentDir}" | 97 | TestSequencePath="${CurrentDir}" |
| 94 | #get YUV detail info $picW $picH $FPS | 98 | #get YUV detail info $picW $picH $FPS |
| 95 | declare -a aYUVInfo | 99 | declare -a aYUVInfo |
| 96 | aYUVInfo=(`./run_ParseYUVInfo.sh ${TestSequenceName}`) | 100 | aYUVInfo=(`./run_ParseYUVInfo.sh ${TestSequenceName}`) |
| 97 | PicW=${aYUVInfo[0]} | 101 | PicW=${aYUVInfo[0]} |
| 98 | PicH=${aYUVInfo[1]} | 102 | PicH=${aYUVInfo[1]} |
| 99 | #test cfg file and test info output file | 103 | #test cfg file and test info output file |
| 100 | ConfigureFile=welsenc.cfg | 104 | ConfigureFile=welsenc.cfg |
| 101 | AllCasePassStatusFile="${FinalResultPath}/${TestSequenceName}_AllCaseOutput.csv" | 105 | AllCasePassStatusFile="${FinalResultPath}/${TestSequenceName}_AllCaseOutput.csv" |
| 102 | UnpassCaseFile="${FinalResultPath}/${TestSequenceName}_unpassCaseOutput.csv" | 106 | UnpassCaseFile="${FinalResultPath}/${TestSequenceName}_unpassCaseOutput.csv" |
| 103 | UpdateSHA1TableFile="${FinalResultPath}/${TestSequenceName}_UpdateSHA1Table.csv" | 107 | UpdateSHA1TableFile="${FinalResultPath}/${TestSequenceName}_UpdateSHA1Table.csv" |
| 104 | HeadLine1="BitMatched Status, SHA-1-Target, SHA-1-Benchmark, MD5-Target, MD5-Benchmark,\ | 108 | |
| 105 | Bitstream-Target,Bitstream-Benchmark,YUV-Target,YUV-Benchmark,\ | 109 | HeadLine1="EncoderFlag, DecoderFlag, FPS, BitSreamSHA1, BitSreamMD5, InputYUVSHA1, InputYUVMD5,\ |
| 106 | -utype, -frms, -numl, -numtl, -sw, -sh,\ | 110 | -utype, -frms, -numl, -numtl, -sw, -sh,\ |
| 107 | -dw 0, -dh 0, -dw 1, -dh 1, -dw 2, -dh 2, -dw 3, -dh 3,\ | 111 | -dw 0, -dh 0, -dw 1, -dh 1, -dw 2, -dh 2, -dw 3, -dh 3,\ |
| 108 | -frout 0, -frout 1, -frout 2, -frout 3,\ | 112 | -frout 0, -frout 1, -frout 2, -frout 3,\ |
| 109 | -lqp 0, -lqp 1, -lqp 2, -lqp 3,\ | 113 | -lqp 0, -lqp 1, -lqp 2, -lqp 3,\ |
| 110 | -rc, -tarb, -ltarb 0, -ltarb 1, -ltarb 2, -ltarb 3,\ | 114 | -rc,-fs, -tarb, -ltarb 0, -ltarb 1, -ltarb 2, -ltarb 3,\ |
| 111 | -slcmd 0, -slcnum 0, -slcmd 1, -slcnum 1,\ | 115 | -slcmd 0, -slcnum 0, -slcmd 1, -slcnum 1,\ |
| 112 | -slcmd 2, -slcnum 2, -slcmd 3, -slcnum 3,\ | 116 | -slcmd 2, -slcnum 2, -slcmd 3, -slcnum 3,\ |
| 113 | -nalsize,\ | 117 | -nalsize,\ |
| 114 | -iper, -thread, -ltr, -db, -denois,\ | 118 | -iper, -thread, -ltr, -db, -denois,\ |
| 115 | -scene, -bgd , -aq, " | 119 | -scene, -bgd , -aq, " |
| 116 | HeadLine2="SHA-1 Value, MD5String, BitStreamSize, YUVSize, \ | 120 | |
| 117 | -utype, -frms, -numl, -numtl, -sw, -sh,\ | 121 | HeadLine2="BitSreamSHA1, BitSreamMD5, InputYUVSHA1, InputYUVMD5,\ |
| 118 | -dw 0, -dh 0, -dw 1, -dh 1,-dw 2, -dh 2, -dw 3, -dh 3,\ | 122 | -utype, -frms, -numl, -numtl, -sw, -sh,\ |
| 119 | -frout 0, -frout 1, -frout 2, -frout 3,\ | 123 | -dw 0, -dh 0, -dw 1, -dh 1,-dw 2, -dh 2, -dw 3, -dh 3,\ |
| 120 | -lqp 0, -lqp 1, -lqp 2, -lqp 3,\ | 124 | -frout 0, -frout 1, -frout 2, -frout 3,\ |
| 121 | -rc, -tarb, -ltarb 0, -ltarb 1, -ltarb 2, -ltarb 3,\ | 125 | -lqp 0, -lqp 1, -lqp 2, -lqp 3,\ |
| 122 | -slcmd 0, -slcnum 0, -slcmd 1, -slcnum 1,\ | 126 | -rc, -fs, -tarb, -ltarb 0, -ltarb 1, -ltarb 2, -ltarb 3,\ |
| 123 | -slcmd 2, -slcnum 2, -slcmd 3, -slcnum 3,\ | 127 | -slcmd 0, -slcnum 0, -slcmd 1, -slcnum 1,\ |
| 124 | -nalsize,\ | 128 | -slcmd 2, -slcnum 2, -slcmd 3, -slcnum 3,\ |
| 125 | -iper, -thread, -ltr, -db, -denois,\ | 129 | -nalsize,\ |
| 126 | -scene , bgd , -aq " | 130 | -iper, -thread, -ltr, -db, -denois,\ |
| 127 | echo ${HeadLine1}>${AllCasePassStatusFile} | 131 | -scene , bgd , -aq " |
| 128 | echo ${HeadLine1}>${UnpassCaseFile} | 132 | |
| 129 | echo ${HeadLine2}>${UpdateSHA1TableFile} | 133 | |
| 130 | | 134 | |
| 131 | #intial Commandline parameters | 135 | echo ${HeadLine1}>${AllCasePassStatusFile} |
| 132 | runEncoderCommandInital | 136 | echo ${HeadLine1}>${UnpassCaseFile} |
| 133 | let "TotalCaseNum=0" | 137 | echo ${HeadLine2}>${UpdateSHA1TableFile} |
| 134 | let "PassCaseNum=0" | 138 | |
| 135 | let "UnpassCaseNum=0" | 139 | #intial Commandline parameters |
| 136 | EncoderCommand="" | 140 | runEncoderCommandInital |
| 137 | EncoderLogFile="${TempDataPath}/Encoder.log" | 141 | let "TotalCaseNum=0" |
| 138 | TargetSHA1="" | 142 | let "PassCaseNum=0" |
| 139 | TargetMD5="" | 143 | let "UnpassCaseNum=0" |
| 140 | TargetYUVSize="" | 144 | EncoderCommand="" |
| 141 | TargetBitstreamSize="" | 145 | EncoderLogFile="${TempDataPath}/Encoder.log" |
| 142 | BenchmarkSHA1="" | 146 | TargetSHA1="" |
| 143 | BenchmarkMD5="" | 147 | TargetMD5="" |
| 144 | BenchmarkYUVSize="" | 148 | TargetYUVSHA1="" |
| 145 | BenchmarkBitstreamSize="" | 149 | TargetYUVMD5="" |
| | 150 | BenchmarkSHA1="" |
| | 151 | BenchmarkMD5="" |
| | 152 | BenchmarkYUVSHA1="" |
| | 153 | BenchmarkYUVMD5="" |
| 146 | } | 154 | } |
| 147 | #*********************************************************** | 155 | #*********************************************************** |
| 148 | #called by runAllCaseTest | 156 | #called by runAllCaseTest |
| 149 | # parse case info --encoder preprocess | 157 | # parse case info --encoder preprocess |
| 150 | #usage runParseCaseInfo $CaseData | 158 | #usage runParseCaseInfo $CaseData |
| 151 | runParseCaseInfo() | 159 | runParseCaseInfo() |
| 152 | { | 160 | { |
| 153 | if [ $# -lt 1 ] | 161 | if [ $# -lt 1 ] |
| 154 | then | 162 | then |
| 155 | echo "no parameter!" | 163 | echo "no parameter!" |
| 156 | return 1 | 164 | return 1 |
| 157 | fi | 165 | fi |
| 158 | local TempData="" | 166 | local TempData="" |
| 159 | local CaseData=$@ | 167 | local CaseData=$@ |
| 160 | local BitstreamPrefix="" | 168 | local BitstreamPrefix="" |
| 161 | BenchmarkSHA1=`echo $CaseData |awk 'BEGIN {FS="[,\r]"} {print $1} ' ` | 169 | BenchmarkSHA1=`echo $CaseData |awk 'BEGIN {FS="[,\r]"} {print $1} ' ` |
| 162 | BenchmarkMD5=`echo $CaseData |awk 'BEGIN {FS="[,\r]"} {print $2} ' ` | 170 | BenchmarkMD5=`echo $CaseData |awk 'BEGIN {FS="[,\r]"} {print $2} ' ` |
| 163 | BenchmarkYUVSize=`echo $CaseData |awk 'BEGIN {FS="[,\r]"} {print $4} ' ` | 171 | BenchmarkYUVSHA1=`echo $CaseData |awk 'BEGIN {FS="[,\r]"} {print $3} ' ` |
| 164 | BenchmarkBitstreamSize=`echo $CaseData |awk 'BEGIN {FS="[,\r]"} {print $3} ' ` | 172 | BenchmarkYUVMD5=`echo $CaseData |awk 'BEGIN {FS="[,\r]"} {print $4} ' ` |
| 165 | | 173 | |
| 166 | declare -a aTempParamIndex=( 6 7 8 9 10 11 12 13 15 16 17 19 20 21 24 25 26 27 30 31 32 33 34 35 ) | 174 | |
| 167 | TempData=`echo $CaseData |awk 'BEGIN {FS="[,\r]"} {for(i=5;i<=NF;i++) printf(" %s",$i)} ' ` | 175 | declare -a aTempParamIndex=( 6 7 8 9 10 11 12 13 15 16 17 19 20 21 25 26 27 28 31 32 33 34 35 36 ) |
| 168 | aEncoderCommandValue=(${TempData}) | 176 | TempData=`echo $CaseData |awk 'BEGIN {FS="[,\r]"} {for(i=5;i<=NF;i++) printf(" %s",$i)} ' ` |
| 169 | let "TempParamFlag=0" | 177 | aEncoderCommandValue=(${TempData}) |
| 170 | for((i=0; i<$NumParameter; i++)) | 178 | let "TempParamFlag=0" |
| 171 | do | 179 | |
| | 180 | for((i=0; i<$NumParameter; i++)) |
| | 181 | do |
| 172 | for ParnmIndex in ${aTempParamIndex[@]} | 182 | for ParnmIndex in ${aTempParamIndex[@]} |
| 173 | do | 183 | do |
| 174 | if [ $i -eq ${ParnmIndex} ] | 184 | if [ $i -eq ${ParnmIndex} ] |
| 175 | then | 185 | then |
| 176 | let "TempParamFlag=1" | 186 | let "TempParamFlag=1" |
| 177 | fi | 187 | fi |
| 178 | done | 188 | done |
| | 189 | |
| 179 | if [ ${TempParamFlag} -eq 0 ] | 190 | if [ ${TempParamFlag} -eq 0 ] |
| 180 | then | 191 | then |
| 181 | BitstreamPrefix=${BitstreamPrefix}_${aEncoderCommandName[$i]}_${aEncoderCommandValue[$i]} | 192 | BitstreamPrefix=${BitstreamPrefix}_${aEncoderCommandName[$i]}_${aEncoderCommandValue[$i]} |
| 182 | fi | 193 | fi |
| 183 | let "TempParamFlag=0" | 194 | let "TempParamFlag=0" |
| 184 | done | 195 | done |
| 185 | | 196 | |
| 186 | BitstreamTarget=${TempDataPath}/${TestSequenceName}_${BitstreamPrefix}_codec_target.264 | 197 | BitstreamTarget=${TempDataPath}/${TestSequenceName}_${BitstreamPrefix}_codec_target.264 |
| 187 | echo "" | 198 | echo "" |
| 188 | echo "BitstreamPrefix is ${BitstreamPrefix}" | 199 | echo "BitstreamPrefix is ${BitstreamPrefix}" |
| 189 | echo "" | 200 | echo "" |
| 190 | } | 201 | } |
| | 202 | |
| 191 | runEncodeOneCase() | 203 | runEncodeOneCase() |
| 192 | { | 204 | { |
| 193 | local ParamCommand="" | 205 | local ParamCommand="" |
| 194 | BitStreamFile=${BitstreamTarget} | 206 | BitStreamFile=${BitstreamTarget} |
| 195 | | 207 | |
| 196 | for ((i=4; i<${NumParameter}; i++)) | 208 | for ((i=4; i<${NumParameter}; i++)) |
| 197 | do | 209 | do |
| 198 | ParamCommand="${ParamCommand} ${aEncoderCommandSet[$i]} ${aEncoderCommandValue[$i]} " | 210 | ParamCommand="${ParamCommand} ${aEncoderCommandSet[$i]} ${aEncoderCommandValue[$i]} " |
| 199 | done | 211 | done |
| 200 | for((i=0;i<4;i++)) | 212 | |
| 201 | do | 213 | for((i=0;i<4;i++)) |
| | 214 | do |
| 202 | aRecYUVFileList[$i]="${TempDataPath}/${TestYUVName}_rec${i}.yuv" | 215 | aRecYUVFileList[$i]="${TempDataPath}/${TestYUVName}_rec${i}.yuv" |
| 203 | done | 216 | done |
| 204 | ParamCommand="${aEncoderCommandSet[0]} ${aEncoderCommandValue[0]} ${aEncoderCommandSet[1]} ${aEncoderCommandValue[1]} \ | 217 | |
| 205 | ${aEncoderCommandSet[2]} ${aEncoderCommandValue[2]} \ | 218 | ParamCommand="${aEncoderCommandSet[0]} ${aEncoderCommandValue[0]} ${aEncoderCommandSet[1]} ${aEncoderCommandValue[1]} \ |
| 206 | -lconfig 0 layer0.cfg -lconfig 1 layer1.cfg -lconfig 2 layer2.cfg -lconfig 3 layer3.cfg \ | 219 | ${aEncoderCommandSet[2]} ${aEncoderCommandValue[2]} \ |
| 207 | ${aEncoderCommandSet[3]} ${aEncoderCommandValue[3]} \ | 220 | -lconfig 0 layer0.cfg -lconfig 1 layer1.cfg -lconfig 2 layer2.cfg -lconfig 3 layer3.cfg \ |
| 208 | ${ParamCommand}" | 221 | ${aEncoderCommandSet[3]} ${aEncoderCommandValue[3]} \ |
| 209 | echo "" | 222 | ${ParamCommand}" |
| 210 | echo "---------------Encode One Case-------------------------------------------" | 223 | echo "" |
| 211 | echo "case line is :" | 224 | echo "---------------Encode One Case-------------------------------------------" |
| 212 | EncoderCommand="./h264enc welsenc.cfg ${ParamCommand} -bf ${BitStreamFile} \ | 225 | echo "case line is :" |
| 213 | -drec 0 ${aRecYUVFileList[0]} -drec 1 ${aRecYUVFileList[1]} \ | 226 | EncoderCommand="./h264enc welsenc.cfg ${ParamCommand} -bf ${BitStreamFile} \ |
| 214 | -drec 2 ${aRecYUVFileList[2]} -drec 3 ${aRecYUVFileList[3]} \ | 227 | -drec 0 ${aRecYUVFileList[0]} -drec 1 ${aRecYUVFileList[1]} \ |
| 215 | -org ${TestSequencePath}/${TestSequenceName}" | 228 | -drec 2 ${aRecYUVFileList[2]} -drec 3 ${aRecYUVFileList[3]} \ |
| 216 | echo ${EncoderCommand} | 229 | -org ${TestSequencePath}/${TestSequenceName}" |
| 217 | echo -e "\n\n" | 230 | echo ${EncoderCommand} |
| 218 | ./h264enc welsenc.cfg ${ParamCommand} -bf ${BitStreamFile} \ | 231 | echo -e "\n\n" |
| 219 | -drec 0 ${aRecYUVFileList[0]} -drec 1 ${aRecYUVFileList[1]} \ | 232 | ./h264enc welsenc.cfg ${ParamCommand} -bf ${BitStreamFile} \ |
| 220 | -drec 2 ${aRecYUVFileList[2]} -drec 3 ${aRecYUVFileList[3]} \ | 233 | -drec 0 ${aRecYUVFileList[0]} -drec 1 ${aRecYUVFileList[1]} \ |
| 221 | -org ${TestSequencePath}/${TestSequenceName} 2>${EncoderLogFile} | 234 | -drec 2 ${aRecYUVFileList[2]} -drec 3 ${aRecYUVFileList[3]} \ |
| 222 | if [ $? -eq 0 ] | 235 | -org ${TestSequencePath}/${TestSequenceName} 2>${EncoderLogFile} |
| 223 | then | 236 | if [ $? -eq 0 ] |
| | 237 | then |
| 224 | let "EncoderFlag=0" | 238 | let "EncoderFlag=0" |
| 225 | else | 239 | else |
| 226 | let "EncoderFlag=1" | 240 | let "EncoderFlag=1" |
| 227 | fi | 241 | fi |
| 228 | | 242 | |
| 229 | #delete the core down file as core down files for disk space limitation | 243 | #delete the core down file as core down files for disk space limitation |
| 230 | for file in ./core* | 244 | for file in ./core* |
| 231 | do | 245 | do |
| 232 | if [ -e ${file} ] | 246 | if [ -e ${file} ] |
| 233 | then | 247 | then |
| 234 | ./run_SafeDelete.sh ${file} | 248 | ./run_SafeDelete.sh ${file} |
| 235 | fi | 249 | fi |
| 236 | done | 250 | done |
| 237 | return 0 | 251 | return 0 |
| 238 | } | | |
| 239 | #usage? runGetFileSize $FileName | | |
| 240 | runGetFileSize() | | |
| 241 | { | | |
| 242 | if [ $# -lt 1 ] | | |
| 243 | then | | |
| 244 | echo "usage runGetFileSize $FileName!" | | |
| 245 | return 1 | | |
| 246 | fi | | |
| 247 | local FileName=$1 | | |
| 248 | local FileSize="" | | |
| 249 | local TempInfo="" | | |
| 250 | TempInfo=`ls -l $FileName` | | |
| 251 | FileSize=`echo $TempInfo | awk '{print $5}'` | | |
| 252 | echo $FileSize | | |
| 253 | } | 252 | } |
| 254 | #called by runAllCaseTest | 253 | |
| 255 | #usage runJSVMVerify | 254 | #called by runAllCaseTest |
| | 255 | #usage runJSVMVerify |
| 256 | runBitStreamVerify() | 256 | runBitStreamVerify() |
| 257 | { | 257 | { |
| 258 | echo "" | 258 | echo "" |
| 259 | echo "******************************************" | 259 | echo "******************************************" |
| 260 | echo "Bit streamSHA1 value comparison.... " | 260 | echo "Bit streamSHA1 value comparison.... " |
| 261 | #******************************************* | 261 | #******************************************* |
| 262 | TargetSHA1="NULL" | 262 | TargetSHA1="NULL" |
| 263 | TargetMD5="NULL" | 263 | TargetMD5="NULL" |
| 264 | TargetYUVSize="NULL" | 264 | TargetYUVSHA1="NULL" |
| 265 | TargetBitstreamSize="NULL" | 265 | TargetYUVMD5="NULL" |
| 266 | | 266 | |
| 267 | if [ ${EncoderFlag} -eq 1 ] | 267 | if [ ${EncoderFlag} -eq 1 ] |
| 268 | then | 268 | then |
| 269 | let "UnpassCaseNum++" | 269 | let "UnpassCaseNum++" |
| 270 | echo "1:unpassed! encoder initial failed or crash!" | 270 | echo "1:unpassed! encoder initial failed or crash!" |
| 271 | DiffFlag="1:unpassed! encoder initial failed or crash!" | 271 | DiffFlag="1:unpassed! encoder initial failed or crash!" |
| 272 | return 1 | 272 | return 1 |
| 273 | fi | 273 | fi |
| 274 | | 274 | |
| 275 | if [ ! -s ${BitStreamFile} ] | 275 | if [ ! -s ${BitStreamFile} ] |
| 276 | then | 276 | then |
| 277 | let "UnpassCaseNum++" | 277 | let "UnpassCaseNum++" |
| 278 | echo "2:unpassed! 0 bits--bit stream" | 278 | echo "2:unpassed! 0 bits--bit stream" |
| 279 | DiffFlag="2:unpassed! 0 bits--bit stream" | 279 | DiffFlag="2:unpassed! 0 bits--bit stream" |
| 280 | return 1 | 280 | return 1 |
| 281 | fi | 281 | fi |
| 282 | #******************************************* | 282 | #******************************************* |
| 283 | #******************************************* | 283 | #******************************************* |
| 284 | echo "" | 284 | echo "" |
| 285 | echo "${BitStreamFile}" | 285 | echo "${BitStreamFile}" |
| 286 | #SHA1 | 286 | #SHA1 |
| 287 | TargetSHA1=`openssl sha1 ${BitStreamFile}` | 287 | TargetSHA1=`openssl sha1 ${BitStreamFile}` |
| 288 | TargetSHA1=`echo ${TargetSHA1} | awk '{print $2}' ` | 288 | TargetSHA1=`echo ${TargetSHA1} | awk '{print $2}' ` |
| 289 | TargetMD5=`openssl md5 ${BitStreamFile}` | 289 | TargetMD5=`openssl md5 ${BitStreamFile}` |
| 290 | TargetMD5=`echo ${TargetMD5} | awk '{print $2}' ` | 290 | TargetMD5=`echo ${TargetMD5} | awk '{print $2}' ` |
| 291 | TargetYUVSize=`runGetFileSize ${TestSequencePath}/${TestSequenceName} ` | 291 | |
| 292 | TargetBitstreamSize=`runGetFileSize ${BitStreamFile}` | 292 | TargetYUVSHA1=`openssl sha1 ${TestSequencePath}/${TestSequenceName} ` |
| 293 | if [[ "${TargetSHA1}" =~ "${BenchmarkSHA1}" ]] | 293 | TargetYUVSHA1=`echo ${TargetYUVSHA1} | awk '{print $2}' ` |
| 294 | then | 294 | TargetYUVMD5=`openssl md5 ${TestSequencePath}/${TestSequenceName} ` |
| 295 | echo "bitstream pass! SHA1--${TargetSHA1} ----- ${BenchmarkSHA1}" | 295 | TargetYUVMD5=`echo ${TargetYUVMD5} | awk '{print $2}' ` |
| 296 | echo "MD5 info: MD5--${TargetMD5} ----- ${BenchmarkMD5}" | 296 | |
| 297 | echo "YUV size info: size--${TargetYUVSize} ---- ${BenchmarkYUVSize} " | 297 | if [[ "${TargetSHA1}" =~ "${BenchmarkSHA1}" ]] |
| 298 | echo "BitStreamSize info: size--${TargetBitstreamSize} ---- ${BenchmarkBitstreamSize}" | 298 | then |
| 299 | DiffFlag="0:passed!" | 299 | echo "bitstream pass! SHA1--${TargetSHA1} ----- ${BenchmarkSHA1}" |
| 300 | let "PassCaseNum++" | 300 | echo "MD5 info: MD5--${TargetMD5} ----- ${BenchmarkMD5}" |
| 301 | return 0 | 301 | echo "YUV SHA1 info: SHA1--${TargetYUVSHA1} ---- ${BenchmarkYUVSHA1} " |
| 302 | else | 302 | echo "YUV MD5 info: MD5--${TargetYUVMD5} ---- ${BenchmarkYUVMD5}" |
| 303 | echo "!!! SHA1 string not match: ${TargetSHA1} ----- ${BenchmarkSHA1} " | 303 | DiffFlag="0:passed!" |
| 304 | echo "MD5 info: MD5--${TargetMD5} ----- ${BenchmarkMD5}" | 304 | let "PassCaseNum++" |
| 305 | echo "YUV size info: size--${TargetYUVSize} ---- ${BenchmarkYUVSize} " | 305 | return 0 |
| 306 | echo "BitStreamSize info: size--${TargetBitstreamSize} ---- ${BenchmarkBitstreamSize}" | 306 | else |
| 307 | DiffFlag="3:unpassed!" | 307 | echo "!!! SHA1 string not match: ${TargetSHA1} ----- ${BenchmarkSHA1} " |
| 308 | let "UnpassCaseNum++" | 308 | echo "MD5 info: MD5--${TargetMD5} ----- ${BenchmarkMD5}" |
| 309 | return 1 | 309 | echo "YUV SHA1 info: SHA1--${TargetYUVSHA1} ---- ${BenchmarkYUVSHA1} " |
| 310 | fi | 310 | echo "YUV MD5 info: MD5--${TargetYUVMD5} ---- ${BenchmarkYUVMD5}" |
| | 311 | DiffFlag="3:unpassed!" |
| | 312 | let "UnpassCaseNum++" |
| | 313 | return 1 |
| | 314 | fi |
| 311 | } | 315 | } |
| 312 | #called by runAllCaseTest | 316 | |
| 313 | #delete temp data files and output single case test result to log file | 317 | #called by runAllCaseTest |
| 314 | #usage runSingleCasePostAction $CaseData | 318 | #delete temp data files and output single case test result to log file |
| | 319 | #usage runSingleCasePostAction $CaseData |
| 315 | runSingleCasePostAction() | 320 | runSingleCasePostAction() |
| 316 | { | 321 | { |
| 317 | if [ $# -lt 1 ] | 322 | if [ $# -lt 1 ] |
| 318 | then | 323 | then |
| 319 | echo "no parameter!" | 324 | echo "no parameter!" |
| 320 | return 1 | 325 | return 1 |
| 321 | fi | 326 | fi |
| 322 | local CaseData=$@ | 327 | local CaseData=$@ |
| 323 | CaseInfo=`echo $CaseData | awk 'BEGIN {FS="[,\r]"} {for(i=5;i<=NF;i++) printf(" %s,",$i)} '` | 328 | CaseInfo=`echo $CaseData | awk 'BEGIN {FS="[,\r]"} {for(i=5;i<=NF;i++) printf(" %s,",$i)} '` |
| 324 | PassStatusInfo="${DiffFlag}, ${TargetSHA1}, ${BenchmarkSHA1}, ${TargetMD5}, ${BenchmarkMD5},\ | 329 | PassStatusInfo="${DiffFlag}, ${TargetSHA1}, ${BenchmarkSHA1}, ${TargetMD5}, ${BenchmarkMD5},\ |
| 325 | ${TargetBitstreamSize}, ${BenchmarkBitstreamSize}, ${TargetYUVSize}, ${BenchmarkYUVSize},\ | 330 | ${TargetYUVMD5}, ${BenchmarkYUVMD5}, ${TargetYUVSHA1}, ${BenchmarkYUVSHA1},\ |
| 326 | ${CaseInfo}, ${EncoderCommand} " | 331 | ${CaseInfo}, ${EncoderCommand} " |
| 327 | echo "${PassStatusInfo}">>${AllCasePassStatusFile} | 332 | echo "${PassStatusInfo}">>${AllCasePassStatusFile} |
| 328 | if [ "$DiffFlag" != "0:passed!" ] | 333 | if [ "$DiffFlag" != "0:passed!" ] |
| 329 | then | 334 | then |
| 330 | echo "${PassStatusInfo}">>${UnpassCaseFile} | 335 | echo "${PassStatusInfo}">>${UnpassCaseFile} |
| 331 | fi | 336 | fi |
| 332 | echo "${TargetSHA1}, ${TargetMD5},${TargetBitstreamSize}, ${TargetYUVSize},${CaseInfo}">>${UpdateSHA1TableFile} | 337 | echo "${TargetSHA1}, ${TargetMD5},${TargetYUVMD5}, ${TargetYUVSHA1},${CaseInfo}">>${UpdateSHA1TableFile} |
| 333 | ./run_SafeDelete.sh ${BitstreamTarget} >>${AllCaseConsoleLogFile} | 338 | ./run_SafeDelete.sh ${BitstreamTarget} >>${AllCaseConsoleLogFile} |
| 334 | } | 339 | } |
| | 340 | |
| 335 | #usage runOutputPassNum | 341 | #usage runOutputPassNum |
| 336 | runOutputPassNum() | 342 | runOutputPassNum() |
| 337 | { | 343 | { |
| 338 | # output file locate in ../result | 344 | # output file locate in ../result |
| 339 | echo "" | 345 | echo "" |
| 340 | echo "***********************************************************" | 346 | echo "***********************************************************" |
| 341 | echo "${TestSequenceName}" | 347 | echo "${TestSequenceName}" |
| 342 | echo "total case Num is: ${TotalCaseNum}" | 348 | echo "total case Num is: ${TotalCaseNum}" |
| 343 | echo "pass case Num is: ${PassCaseNum}" | 349 | echo "pass case Num is: ${PassCaseNum}" |
| 344 | echo "unpass case Num is: ${UnpassCaseNum}" | 350 | echo "unpass case Num is: ${UnpassCaseNum}" |
| 345 | echo "***********************************************************" | 351 | echo "***********************************************************" |
| 346 | echo "" | 352 | echo "" |
| 347 | } | 353 | } |
| | 354 | |
| 348 | # run all test case based on XXXcase.csv file | 355 | # run all test case based on XXXcase.csv file |
| 349 | #usage runAllCaseTest | 356 | #usage runAllCaseTest |
| 350 | runAllCaseTest() | 357 | runAllCaseTest() |
| 351 | { | 358 | { |
| 352 | local EncoderLogInfo="" | 359 | local EncoderLogInfo="" |
| 353 | while read CaseData | 360 | while read CaseData |
| 354 | do | 361 | do |
| 355 | #get case parameter's value | 362 | #get case parameter's value |
| 356 | if [[ ! $CaseData =~ "SHA" ]] | 363 | if [[ ! $CaseData =~ "SHA" ]] |
| 357 | then | | |
| 358 | echo "" >>${AllCaseConsoleLogFile} | | |
| 359 | echo "" >>${AllCaseConsoleLogFile} | | |
| 360 | echo "" >>${AllCaseConsoleLogFile} | | |
| 361 | echo "********************case index is ${TotalCaseNum}**************************************" >>${AllCaseConsoleLogFile} | | |
| 362 | runParseCaseInfo ${CaseData} >>${AllCaseConsoleLogFile} | | |
| 363 | echo "" >>${AllCaseConsoleLogFile} | | |
| 364 | runEncodeOneCase >>${AllCaseConsoleLogFile} | | |
| 365 | cat ${EncoderLogFile}>>${AllCaseConsoleLogFile} | | |
| 366 | runBitStreamVerify >>${AllCaseConsoleLogFile} | | |
| 367 | let "DisplayFlag=TotalCaseNum%100" | | |
| 368 | if [ ${DisplayFlag} -eq 0 ] | | |
| 369 | then | | |
| 370 | if [ "$DiffFlag" = "0:passed!" ] | | |
| 371 | then | 364 | then |
| 372 | echo -e "\033[32m OK! ${TestSequenceName} Case Index ${TotalCaseNum}:SHA-1(Current--Benchmark): ${TargetSHA1}-----${BenchmarkSHA1} \033[0m" | 365 | echo "" >>${AllCaseConsoleLogFile} |
| 373 | echo -e "\033[32m ----MD5 (Current--Benchmark): ${TargetMD5}-----${BenchmarkMD5} \033[0m" | 366 | echo "" >>${AllCaseConsoleLogFile} |
| 374 | echo -e "\033[32m ----BitstreamSize: ${TargetBitstreamSize}, ${BenchmarkBitstreamSize} YUVSize: ${TargetYUVSize}, ${BenchmarkYUVSize} \033[0m" | 367 | echo "" >>${AllCaseConsoleLogFile} |
| | 368 | echo "********************case index is ${TotalCaseNum}**************************************" >>${AllCaseConsoleLogFile} |
| | 369 | runParseCaseInfo ${CaseData} >>${AllCaseConsoleLogFile} |
| | 370 | echo "" >>${AllCaseConsoleLogFile} |
| | 371 | runEncodeOneCase >>${AllCaseConsoleLogFile} |
| | 372 | cat ${EncoderLogFile} >>${AllCaseConsoleLogFile} |
| | 373 | runBitStreamVerify >>${AllCaseConsoleLogFile} |
| | 374 | let "DisplayFlag=TotalCaseNum%100" |
| | 375 | if [ ${DisplayFlag} -eq 0 ] |
| | 376 | then |
| | 377 | if [ "$DiffFlag" = "0:passed!" ] |
| | 378 | then |
| | 379 | echo -e "\033[32m OK! ${TestSequenceName} Case Index ${TotalCaseNum}:SHA-1(Current--Benchmark): ${TargetSHA1}-----${BenchmarkSHA1} \033[0m" |
| | 380 | echo -e "\033[32m ----MD5 (Current--Benchmark): ${TargetMD5}-----${BenchmarkMD5} \033[0m" |
| | 381 | echo -e "\033[32m ----YUVMD5: ${TargetYUVMD5}, ${BenchmarkYUVMD5} YUVSHA1: ${TargetYUVSHA1}, ${BenchmarkYUVSHA1} \033[0m" |
| | 382 | fi |
| | 383 | fi |
| | 384 | #****************************************** |
| | 385 | if [ ! "$DiffFlag" = "0:passed!" ] |
| | 386 | then |
| | 387 | echo -e "\033[31m Failed! ${TestSequenceName} Case Index ${TotalCaseNum}:SHA-1(Current--Benchmark): ${TargetSHA1}-----${BenchmarkSHA1} \033[0m" |
| | 388 | echo -e "\033[31m ----MD5 (Current--Benchmark): ${TargetMD5}-----${BenchmarkMD5} \033[0m" |
| | 389 | echo -e "\033[31m ----YUVMD5: ${TargetYUVMD5}, ${BenchmarkYUVMD5} YUVSHA1: ${TargetYUVSHA1}, ${BenchmarkYUVSHA1} \033[0m" |
| | 390 | EncoderLogInfo=`cat ${EncoderLogFile}` |
| | 391 | echo -e "\033[31m ${EncoderLogInfo} \033[0m" |
| | 392 | fi |
| | 393 | runSingleCasePostAction ${CaseData} |
| | 394 | let "TotalCaseNum++" |
| 375 | fi | 395 | fi |
| 376 | fi | 396 | done <$AllCaseFile |
| 377 | #****************************************** | | |
| 378 | if [ ! "$DiffFlag" = "0:passed!" ] | | |
| 379 | then | | |
| 380 | echo -e "\033[31m Failed! ${TestSequenceName} Case Index ${TotalCaseNum}:SHA-1(Current--Benchmark): ${TargetSHA1}-----${BenchmarkSHA1} \033[0m" | | |
| 381 | echo -e "\033[31m ----MD5 (Current--Benchmark): ${TargetMD5}-----${BenchmarkMD5} \033[0m" | | |
| 382 | echo -e "\033[31m ----BitstreamSize: ${TargetBitstreamSize}, ${BenchmarkBitstreamSize} YUVSize: ${TargetYUVSize}, ${BenchmarkYUVSize} \033[0m" | | |
| 383 | EncoderLogInfo=`cat ${EncoderLogFile}` | | |
| 384 | echo -e "\033[31m ${EncoderLogInfo} \033[0m" | | |
| 385 | fi | | |
| 386 | runSingleCasePostAction ${CaseData} | | |
| 387 | let "TotalCaseNum++" | | |
| 388 | fi | | |
| 389 | done <$AllCaseFile | | |
| 390 | } | 397 | } |
| 391 | #*********************************************************** | 398 | #*********************************************************** |
| 392 | # usage: runMain $TestYUV $AllCaseFile | 399 | # usage: runMain $TestYUV $AllCaseFile |
| 393 | runMain() | 400 | runMain() |
| 394 | { | 401 | { |
| 395 | if [ ! $# -eq 2 ] | 402 | if [ ! $# -eq 2 ] |
| 396 | then | 403 | then |
| 397 | echo "usage: run_BinarySHA1Comparison.sh \$TestYUV \$AllCaseFile" | 404 | echo "usage: run_BinarySHA1Comparison.sh \$TestYUV \$AllCaseFile" |
| 398 | return 1 | 405 | return 1 |
| 399 | fi | 406 | fi |
| 400 | runGlobalVariableDef | 407 | |
| 401 | #for test sequence info | 408 | runGlobalVariableDef |
| 402 | TestSequenceName=$1 | 409 | |
| 403 | AllCaseFile=$2 | 410 | #for test sequence info |
| 404 | runGlobalVariableInitial | 411 | TestSequenceName=$1 |
| 405 | TestFolder=`echo $CurrentDir | awk 'BEGIN {FS="/"} { i=NF; print $i}'` | 412 | AllCaseFile=$2 |
| 406 | AllCaseConsoleLogFile="${FinalResultPath}/${TestSequenceName}.TestLog" | 413 | runGlobalVariableInitial |
| 407 | CaseSummaryFile="${FinalResultPath}/${TestSequenceName}.Summary" | 414 | TestFolder=`echo $CurrentDir | awk 'BEGIN {FS="/"} { i=NF; print $i}'` |
| 408 | FlagFile="" | 415 | AllCaseConsoleLogFile="${FinalResultPath}/${TestSequenceName}.TestLog" |
| 409 | #run all cases | 416 | CaseSummaryFile="${FinalResultPath}/${TestSequenceName}.Summary" |
| 410 | runAllCaseTest | 417 | FlagFile="" |
| 411 | # output file locate in ./result | 418 | |
| 412 | echo "${TestSequenceName}, \ | 419 | #run all cases |
| 413 | ${PassCaseNum} pass!, \ | 420 | runAllCaseTest |
| 414 | ${UnpassCaseNum} unpass!,\ | 421 | |
| 415 | detail file located in ../AllTestData/${TestFolder}/result">${CaseSummaryFile} | 422 | # output file locate in ./result |
| 416 | runOutputPassNum | 423 | echo "${TestSequenceName}, \ |
| 417 | #generate All case Flag | 424 | ${PassCaseNum} pass!, \ |
| 418 | if [ ! ${UnpassCaseNum} -eq 0 ] | 425 | ${UnpassCaseNum} unpass!,\ |
| 419 | then | 426 | detail file located in ../AllTestData/${TestFolder}/result">${CaseSummaryFile} |
| 420 | echo "" | 427 | runOutputPassNum |
| 421 | exit 1 | 428 | |
| 422 | else | 429 | #generate All case Flag |
| 423 | echo "" | 430 | if [ ! ${UnpassCaseNum} -eq 0 ] |
| 424 | exit 0 | 431 | then |
| 425 | fi | 432 | echo "" |
| | 433 | exit 1 |
| | 434 | else |
| | 435 | echo "" |
| | 436 | exit 0 |
| | 437 | fi |
| 426 | } | 438 | } |
| 427 | TestYUVName=$1 | 439 | TestYUVName=$1 |
| 428 | AllCaseFile=$2 | 440 | AllCaseFile=$2 |
| 429 | runMain ${TestYUVName} ${AllCaseFile} | 441 | runMain ${TestYUVName} ${AllCaseFile} |
| 430 | | 442 | |