1 #!/bin/sh 2 3 # Copyright (c) 2011-2012 Jean-Marc Valin 4 # 5 # This file is extracted from RFC6716. Please see that RFC for additional 6 # information. 7 # 8 # Redistribution and use in source and binary forms, with or without 9 # modification, are permitted provided that the following conditions 10 # are met: 11 # 12 # - Redistributions of source code must retain the above copyright 13 # notice, this list of conditions and the following disclaimer. 14 # 15 # - Redistributions in binary form must reproduce the above copyright 16 # notice, this list of conditions and the following disclaimer in the 17 # documentation and/or other materials provided with the distribution. 18 # 19 # - Neither the name of Internet Society, IETF or IETF Trust, nor the 20 # names of specific contributors, may be used to endorse or promote 21 # products derived from this software without specific prior written 22 # permission. 23 # 24 # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 25 # ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 26 # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 27 # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER 28 # OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 29 # EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 30 # PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 31 # PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 32 # LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 33 # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 34 # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 35 36 rm -f logs_mono.txt logs_mono2.txt 37 rm -f logs_stereo.txt logs_stereo2.txt 38 39 if [ "$#" -ne "3" ]; then 40 echo "usage: run_vectors.sh <exec path> <vector path> <rate>" 41 exit 1 42 fi 43 44 CMD_PATH=$1 45 VECTOR_PATH=$2 46 RATE=$3 47 48 : ${OPUS_DEMO:=$CMD_PATH/opus_demo} 49 : ${OPUS_COMPARE:=$CMD_PATH/opus_compare} 50 51 if [ -d "$VECTOR_PATH" ]; then 52 echo "Test vectors found in $VECTOR_PATH" 53 else 54 echo "No test vectors found" 55 #Don't make the test fail here because the test vectors 56 #will be distributed separately 57 exit 0 58 fi 59 60 if [ ! -x "$OPUS_COMPARE" ]; then 61 echo "ERROR: Compare program not found: $OPUS_COMPARE" 62 exit 1 63 fi 64 65 if [ -x "$OPUS_DEMO" ]; then 66 echo "Decoding with $OPUS_DEMO" 67 else 68 echo "ERROR: Decoder not found: $OPUS_DEMO" 69 exit 1 70 fi 71 72 echo "==============" 73 echo "Testing mono" 74 echo "==============" 75 echo 76 77 for file in 01 02 03 04 05 06 07 08 09 10 11 12 78 do 79 if [ -e "$VECTOR_PATH/testvector$file.bit" ]; then 80 echo "Testing testvector$file" 81 else 82 echo "Bitstream file not found: testvector$file.bit" 83 fi 84 if "$OPUS_DEMO" -d "$RATE" 1 "$VECTOR_PATH/testvector$file.bit" tmp.out >> logs_mono.txt 2>&1; then 85 echo "successfully decoded" 86 else 87 echo "ERROR: decoding failed" 88 exit 1 89 fi 90 "$OPUS_COMPARE" -r "$RATE" "$VECTOR_PATH/testvector${file}.dec" tmp.out >> logs_mono.txt 2>&1 91 float_ret=$? 92 "$OPUS_COMPARE" -r "$RATE" "$VECTOR_PATH/testvector${file}m.dec" tmp.out >> logs_mono2.txt 2>&1 93 float_ret2=$? 94 if [ "$float_ret" -eq "0" ] || [ "$float_ret2" -eq "0" ]; then 95 echo "output matches reference" 96 else 97 echo "ERROR: output does not match reference" 98 exit 1 99 fi 100 echo 101 done 102 103 echo "==============" 104 echo Testing stereo 105 echo "==============" 106 echo 107 108 for file in 01 02 03 04 05 06 07 08 09 10 11 12 109 do 110 if [ -e "$VECTOR_PATH/testvector$file.bit" ]; then 111 echo "Testing testvector$file" 112 else 113 echo "Bitstream file not found: testvector$file" 114 fi 115 if "$OPUS_DEMO" -d "$RATE" 2 "$VECTOR_PATH/testvector$file.bit" tmp.out >> logs_stereo.txt 2>&1; then 116 echo "successfully decoded" 117 else 118 echo "ERROR: decoding failed" 119 exit 1 120 fi 121 "$OPUS_COMPARE" -s -r "$RATE" "$VECTOR_PATH/testvector${file}.dec" tmp.out >> logs_stereo.txt 2>&1 122 float_ret=$? 123 "$OPUS_COMPARE" -s -r "$RATE" "$VECTOR_PATH/testvector${file}m.dec" tmp.out >> logs_stereo2.txt 2>&1 124 float_ret2=$? 125 if [ "$float_ret" -eq "0" ] || [ "$float_ret2" -eq "0" ]; then 126 echo "output matches reference" 127 else 128 echo "ERROR: output does not match reference" 129 exit 1 130 fi 131 echo 132 done 133 134 135 136 echo "All tests have passed successfully" 137 mono1=`grep quality logs_mono.txt | awk '{sum+=$4}END{if (NR == 12) sum /= 12; else sum = 0; print sum}'` 138 mono2=`grep quality logs_mono2.txt | awk '{sum+=$4}END{if (NR == 12) sum /= 12; else sum = 0; print sum}'` 139 echo $mono1 $mono2 | awk '{if ($2 > $1) $1 = $2; print "Average mono quality is", $1, "%"}' 140 141 stereo1=`grep quality logs_stereo.txt | awk '{sum+=$4}END{if (NR == 12) sum /= 12; else sum = 0; print sum}'` 142 stereo2=`grep quality logs_stereo2.txt | awk '{sum+=$4}END{if (NR == 12) sum /= 12; else sum = 0; print sum}'` 143 echo $stereo1 $stereo2 | awk '{if ($2 > $1) $1 = $2; print "Average stereo quality is", $1, "%"}' 144