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