xref: /aosp_15_r20/external/libopus/tests/run_vectors.sh (revision a58d3d2adb790c104798cd88c8a3aff4fa8b82cc)
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