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 36rm -f logs_mono.txt logs_mono2.txt 37rm -f logs_stereo.txt logs_stereo2.txt 38 39if [ "$#" -ne "3" ]; then 40 echo "usage: run_vectors.sh <exec path> <vector path> <rate>" 41 exit 1 42fi 43 44CMD_PATH=$1 45VECTOR_PATH=$2 46RATE=$3 47 48: ${OPUS_DEMO:=$CMD_PATH/opus_demo} 49: ${OPUS_COMPARE:=$CMD_PATH/opus_compare} 50 51if [ -d "$VECTOR_PATH" ]; then 52 echo "Test vectors found in $VECTOR_PATH" 53else 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 58fi 59 60if [ ! -x "$OPUS_COMPARE" ]; then 61 echo "ERROR: Compare program not found: $OPUS_COMPARE" 62 exit 1 63fi 64 65if [ -x "$OPUS_DEMO" ]; then 66 echo "Decoding with $OPUS_DEMO" 67else 68 echo "ERROR: Decoder not found: $OPUS_DEMO" 69 exit 1 70fi 71 72echo "==============" 73echo "Testing mono" 74echo "==============" 75echo 76 77for file in 01 02 03 04 05 06 07 08 09 10 11 12 78do 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 101done 102 103echo "==============" 104echo Testing stereo 105echo "==============" 106echo 107 108for file in 01 02 03 04 05 06 07 08 09 10 11 12 109do 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 132done 133 134 135 136echo "All tests have passed successfully" 137mono1=`grep quality logs_mono.txt | awk '{sum+=$4}END{if (NR == 12) sum /= 12; else sum = 0; print sum}'` 138mono2=`grep quality logs_mono2.txt | awk '{sum+=$4}END{if (NR == 12) sum /= 12; else sum = 0; print sum}'` 139echo $mono1 $mono2 | awk '{if ($2 > $1) $1 = $2; print "Average mono quality is", $1, "%"}' 140 141stereo1=`grep quality logs_stereo.txt | awk '{sum+=$4}END{if (NR == 12) sum /= 12; else sum = 0; print sum}'` 142stereo2=`grep quality logs_stereo2.txt | awk '{sum+=$4}END{if (NR == 12) sum /= 12; else sum = 0; print sum}'` 143echo $stereo1 $stereo2 | awk '{if ($2 > $1) $1 = $2; print "Average stereo quality is", $1, "%"}' 144