xref: /aosp_15_r20/external/flac/test/test_flac.sh (revision 600f14f40d737144c998e2ec7a483122d3776fbc)
1*600f14f4SXin Li#!/bin/sh -e
2*600f14f4SXin Li
3*600f14f4SXin Li#  FLAC - Free Lossless Audio Codec
4*600f14f4SXin Li#  Copyright (C) 2001-2009  Josh Coalson
5*600f14f4SXin Li#  Copyright (C) 2011-2023  Xiph.Org Foundation
6*600f14f4SXin Li#
7*600f14f4SXin Li#  This file is part the FLAC project.  FLAC is comprised of several
8*600f14f4SXin Li#  components distributed under different licenses.  The codec libraries
9*600f14f4SXin Li#  are distributed under Xiph.Org's BSD-like license (see the file
10*600f14f4SXin Li#  COPYING.Xiph in this distribution).  All other programs, libraries, and
11*600f14f4SXin Li#  plugins are distributed under the GPL (see COPYING.GPL).  The documentation
12*600f14f4SXin Li#  is distributed under the Gnu FDL (see COPYING.FDL).  Each file in the
13*600f14f4SXin Li#  FLAC distribution contains at the top the terms under which it may be
14*600f14f4SXin Li#  distributed.
15*600f14f4SXin Li#
16*600f14f4SXin Li#  Since this particular file is relevant to all components of FLAC,
17*600f14f4SXin Li#  it may be distributed under the Xiph.Org license, which is the least
18*600f14f4SXin Li#  restrictive of those mentioned above.  See the file COPYING.Xiph in this
19*600f14f4SXin Li#  distribution.
20*600f14f4SXin Li
21*600f14f4SXin Li. ./common.sh
22*600f14f4SXin Li
23*600f14f4SXin Li# we use '.' as decimal separator in --skip/--until tests
24*600f14f4SXin Liexport LANG=C LC_ALL=C
25*600f14f4SXin Li
26*600f14f4SXin Lidddie="die ERROR: creating files with dd"
27*600f14f4SXin Li
28*600f14f4SXin LiPATH="$(pwd)/../src/flac:$PATH"
29*600f14f4SXin LiPATH="$(pwd)/../src/metaflac:$PATH"
30*600f14f4SXin LiPATH="$(pwd)/../src/test_streams:$PATH"
31*600f14f4SXin LiPATH="$(pwd)/../objs/$BUILD/bin:$PATH"
32*600f14f4SXin Li
33*600f14f4SXin Liflac${EXE} --help 1>/dev/null 2>/dev/null || die "ERROR can't find flac executable"
34*600f14f4SXin Li
35*600f14f4SXin Lirun_flac ()
36*600f14f4SXin Li{
37*600f14f4SXin Li	if [ "$FLAC__TEST_WITH_VALGRIND" = yes ] ; then
38*600f14f4SXin Li		echo "valgrind --leak-check=yes --show-reachable=yes --num-callers=50 flac $*" >>test_flac.valgrind.log
39*600f14f4SXin Li		valgrind --leak-check=yes --show-reachable=yes --num-callers=50 --log-fd=4 flac${EXE} $TOTALLY_SILENT --no-error-on-compression-fail $* 4>>test_flac.valgrind.log
40*600f14f4SXin Li	else
41*600f14f4SXin Li		flac${EXE} $TOTALLY_SILENT --no-error-on-compression-fail $*
42*600f14f4SXin Li	fi
43*600f14f4SXin Li}
44*600f14f4SXin Li
45*600f14f4SXin Lirun_metaflac ()
46*600f14f4SXin Li{
47*600f14f4SXin Li	if [ "$FLAC__TEST_WITH_VALGRIND" = yes ] ; then
48*600f14f4SXin Li		echo "valgrind --leak-check=yes --show-reachable=yes --num-callers=50 metaflac $*" >>test_flac.valgrind.log
49*600f14f4SXin Li		valgrind --leak-check=yes --show-reachable=yes --num-callers=50 --log-fd=4 metaflac${EXE} $* 4>>test_flac.valgrind.log
50*600f14f4SXin Li	else
51*600f14f4SXin Li		metaflac${EXE} $*
52*600f14f4SXin Li	fi
53*600f14f4SXin Li}
54*600f14f4SXin Li
55*600f14f4SXin Limd5cmp ()
56*600f14f4SXin Li{
57*600f14f4SXin Li	n=$( ( [ -f "$1" ] && [ -f "$2" ] && metaflac${EXE} --show-md5sum --no-filename "$1" "$2" 2>/dev/null || exit 1 ) | uniq | wc -l)
58*600f14f4SXin Li	[ "$n" != "" ] && [ $n = 1 ]
59*600f14f4SXin Li}
60*600f14f4SXin Li
61*600f14f4SXin Liecho "Checking for --ogg support in flac..."
62*600f14f4SXin Liif flac${EXE} --ogg $TOTTALY_SILENT --force-raw-format --endian=little --sign=signed --channels=1 --bps=8 --sample-rate=44100 -c $0 1>/dev/null 2>&1 ; then
63*600f14f4SXin Li	has_ogg=yes;
64*600f14f4SXin Li	echo "flac --ogg works"
65*600f14f4SXin Lielse
66*600f14f4SXin Li	has_ogg=no;
67*600f14f4SXin Li	echo "flac --ogg doesn't work"
68*600f14f4SXin Lifi
69*600f14f4SXin Li
70*600f14f4SXin Liecho "Generating streams..."
71*600f14f4SXin Liif [ ! -f wacky1.wav ] ; then
72*600f14f4SXin Li	test_streams || die "ERROR during test_streams"
73*600f14f4SXin Lifi
74*600f14f4SXin Li
75*600f14f4SXin Li############################################################################
76*600f14f4SXin Li# test that flac doesn't automatically overwrite files unless -f is used
77*600f14f4SXin Li############################################################################
78*600f14f4SXin Li
79*600f14f4SXin Liecho "Try encoding to a file that exists; should fail"
80*600f14f4SXin Licp wacky1.wav exist.wav
81*600f14f4SXin Litouch exist.flac
82*600f14f4SXin Liif run_flac -0 exist.wav ; then
83*600f14f4SXin Li	die "ERROR: it should have failed but didn't"
84*600f14f4SXin Lielse
85*600f14f4SXin Li	echo "OK, it failed as it should"
86*600f14f4SXin Lifi
87*600f14f4SXin Li
88*600f14f4SXin Liecho "Try encoding with -f to a file that exists; should succeed"
89*600f14f4SXin Liif run_flac -0 --force exist.wav ; then
90*600f14f4SXin Li	echo "OK, it succeeded as it should"
91*600f14f4SXin Lielse
92*600f14f4SXin Li	die "ERROR: it should have succeeded but didn't"
93*600f14f4SXin Lifi
94*600f14f4SXin Li
95*600f14f4SXin Liecho "Try decoding to a file that exists; should fail"
96*600f14f4SXin Liif run_flac -d exist.flac ; then
97*600f14f4SXin Li	die "ERROR: it should have failed but didn't"
98*600f14f4SXin Lielse
99*600f14f4SXin Li	echo "OK, it failed as it should"
100*600f14f4SXin Lifi
101*600f14f4SXin Li
102*600f14f4SXin Liecho "Try decoding with -f to a file that exists; should succeed"
103*600f14f4SXin Liif run_flac -d -f exist.flac ; then
104*600f14f4SXin Li	echo "OK, it succeeded as it should"
105*600f14f4SXin Lielse
106*600f14f4SXin Li	die "ERROR: it should have succeeded but didn't"
107*600f14f4SXin Lifi
108*600f14f4SXin Li
109*600f14f4SXin Lirm -f exist.wav exist.flac
110*600f14f4SXin Li
111*600f14f4SXin Li############################################################################
112*600f14f4SXin Li# test fractional block sizes
113*600f14f4SXin Li############################################################################
114*600f14f4SXin Li
115*600f14f4SXin Litest_fractional ()
116*600f14f4SXin Li{
117*600f14f4SXin Li	blocksize=$1
118*600f14f4SXin Li	samples=$2
119*600f14f4SXin Li	dd if=noise.raw ibs=4 count=$samples of=pbs.raw 2>/dev/null || $dddie
120*600f14f4SXin Li	echo $ECHO_N "fractional block size test (blocksize=$blocksize samples=$samples) encode... " $ECHO_C
121*600f14f4SXin Li	run_flac --force --verify --force-raw-format --endian=little --sign=signed --sample-rate=44100 --bps=16 --channels=2 --blocksize=$blocksize --no-padding --lax -o pbs.flac pbs.raw || die "ERROR"
122*600f14f4SXin Li	echo $ECHO_N "decode... " $ECHO_C
123*600f14f4SXin Li	run_flac --force --decode --force-raw-format --endian=little --sign=signed -o pbs.cmp pbs.flac || die "ERROR"
124*600f14f4SXin Li	echo $ECHO_N "compare... " $ECHO_C
125*600f14f4SXin Li	cmp pbs.raw pbs.cmp || die "ERROR: file mismatch"
126*600f14f4SXin Li	echo "OK"
127*600f14f4SXin Li	rm -f pbs.raw pbs.flac pbs.cmp
128*600f14f4SXin Li}
129*600f14f4SXin Li
130*600f14f4SXin Li# The special significance of 2048 is it's the # of samples that flac calls
131*600f14f4SXin Li# FLAC__stream_encoder_process() on.
132*600f14f4SXin Li#
133*600f14f4SXin Li# We're trying to make sure the 1-sample overread logic in the stream encoder
134*600f14f4SXin Li# (used for last-block checking) works; these values probe around common
135*600f14f4SXin Li# multiples of the flac sample chunk size (2048) and the blocksize.
136*600f14f4SXin Lifor samples in 31 32 33 34 35 2046 2047 2048 2049 2050 ; do
137*600f14f4SXin Li	test_fractional 33 $samples
138*600f14f4SXin Lidone
139*600f14f4SXin Lifor samples in 254 255 256 257 258 510 511 512 513 514 1022 1023 1024 1025 1026 2046 2047 2048 2049 2050 4094 4095 4096 4097 4098 ; do
140*600f14f4SXin Li	test_fractional 256 $samples
141*600f14f4SXin Lidone
142*600f14f4SXin Lifor samples in 1022 1023 1024 1025 1026 2046 2047 2048 2049 2050 4094 4095 4096 4097 4098 ; do
143*600f14f4SXin Li	test_fractional 2048 $samples
144*600f14f4SXin Lidone
145*600f14f4SXin Lifor samples in 1022 1023 1024 1025 1026 2046 2047 2048 2049 2050 4094 4095 4096 4097 4098 4606 4607 4608 4609 4610 8190 8191 8192 8193 8194 16382 16383 16384 16385 16386 ; do
146*600f14f4SXin Li	test_fractional 4608 $samples
147*600f14f4SXin Lidone
148*600f14f4SXin Li
149*600f14f4SXin Li############################################################################
150*600f14f4SXin Li# basic 'round-trip' tests of various kinds of streams
151*600f14f4SXin Li############################################################################
152*600f14f4SXin Li
153*600f14f4SXin Lirt_test_raw ()
154*600f14f4SXin Li{
155*600f14f4SXin Li	f="$1"
156*600f14f4SXin Li	extra="$2"
157*600f14f4SXin Li	channels="$(echo $f | awk -F- '{print $2}')"
158*600f14f4SXin Li	bps="$(echo $f | awk -F- '{print $3}')"
159*600f14f4SXin Li	sign="$(echo $f | awk -F- '{print $4}')"
160*600f14f4SXin Li
161*600f14f4SXin Li	echo $ECHO_N "round-trip test ($f) encode... " $ECHO_C
162*600f14f4SXin Li	run_flac --force --verify --force-raw-format --endian=little --sign=$sign --sample-rate=44100 --bps=$bps --channels=$channels --no-padding --lax -o rt.flac $extra $f || die "ERROR"
163*600f14f4SXin Li	echo $ECHO_N "decode... " $ECHO_C
164*600f14f4SXin Li	run_flac --force --decode --force-raw-format --endian=little --sign=$sign -o rt.raw $extra rt.flac || die "ERROR"
165*600f14f4SXin Li	echo $ECHO_N "compare... " $ECHO_C
166*600f14f4SXin Li	cmp $f rt.raw || die "ERROR: file mismatch"
167*600f14f4SXin Li	echo "OK"
168*600f14f4SXin Li	rm -f rt.flac rt.raw
169*600f14f4SXin Li}
170*600f14f4SXin Li
171*600f14f4SXin Lirt_test_wav ()
172*600f14f4SXin Li{
173*600f14f4SXin Li	f="$1"
174*600f14f4SXin Li	extra="$2"
175*600f14f4SXin Li	echo $ECHO_N "round-trip test ($f) encode... " $ECHO_C
176*600f14f4SXin Li	run_flac --force --verify --channel-map=none --no-padding --lax -o rt.flac $extra $f || die "ERROR"
177*600f14f4SXin Li	echo $ECHO_N "decode... " $ECHO_C
178*600f14f4SXin Li	run_flac --force --decode --channel-map=none -o rt.wav $extra rt.flac || die "ERROR"
179*600f14f4SXin Li	echo $ECHO_N "compare... " $ECHO_C
180*600f14f4SXin Li	cmp $f rt.wav || die "ERROR: file mismatch"
181*600f14f4SXin Li	echo "OK"
182*600f14f4SXin Li	rm -f rt.flac rt.wav
183*600f14f4SXin Li}
184*600f14f4SXin Li
185*600f14f4SXin Lirt_test_wav_autokf ()
186*600f14f4SXin Li{
187*600f14f4SXin Li	f="$1"
188*600f14f4SXin Li	extra="$2"
189*600f14f4SXin Li	echo $ECHO_N "round-trip test ($f) encode... " $ECHO_C
190*600f14f4SXin Li	run_flac --force --verify --channel-map=none --no-padding --lax -o rt.flac $extra $f || die "ERROR"
191*600f14f4SXin Li	echo $ECHO_N "decode... " $ECHO_C
192*600f14f4SXin Li	run_flac --force --decode --channel-map=none $extra rt.flac || die "ERROR"
193*600f14f4SXin Li	echo $ECHO_N "compare... " $ECHO_C
194*600f14f4SXin Li	cmp $f rt.wav || die "ERROR: file mismatch"
195*600f14f4SXin Li	echo "OK"
196*600f14f4SXin Li	rm -f rt.flac rt.wav
197*600f14f4SXin Li}
198*600f14f4SXin Li
199*600f14f4SXin Lirt_test_w64 ()
200*600f14f4SXin Li{
201*600f14f4SXin Li	f="$1"
202*600f14f4SXin Li	extra="$2"
203*600f14f4SXin Li	echo $ECHO_N "round-trip test ($f) encode... " $ECHO_C
204*600f14f4SXin Li	run_flac --force --verify --channel-map=none --no-padding --lax -o rt.flac $extra $f || die "ERROR"
205*600f14f4SXin Li	echo $ECHO_N "decode... " $ECHO_C
206*600f14f4SXin Li	run_flac --force --decode --channel-map=none -o rt.w64 $extra rt.flac || die "ERROR"
207*600f14f4SXin Li	echo $ECHO_N "compare... " $ECHO_C
208*600f14f4SXin Li	cmp $f rt.w64 || die "ERROR: file mismatch"
209*600f14f4SXin Li	echo "OK"
210*600f14f4SXin Li	rm -f rt.flac rt.w64
211*600f14f4SXin Li}
212*600f14f4SXin Li
213*600f14f4SXin Lirt_test_w64_autokf ()
214*600f14f4SXin Li{
215*600f14f4SXin Li	f="$1"
216*600f14f4SXin Li	extra="$2"
217*600f14f4SXin Li	echo $ECHO_N "round-trip test ($f) encode... " $ECHO_C
218*600f14f4SXin Li	run_flac --force --verify --channel-map=none --no-padding --lax -o rt.flac $extra $f || die "ERROR"
219*600f14f4SXin Li	echo $ECHO_N "decode... " $ECHO_C
220*600f14f4SXin Li	run_flac --force --decode --channel-map=none $extra rt.flac || die "ERROR"
221*600f14f4SXin Li	echo $ECHO_N "compare... " $ECHO_C
222*600f14f4SXin Li	cmp $f rt.w64 || die "ERROR: file mismatch"
223*600f14f4SXin Li	echo "OK"
224*600f14f4SXin Li	rm -f rt.flac rt.w64
225*600f14f4SXin Li}
226*600f14f4SXin Li
227*600f14f4SXin Lirt_test_rf64 ()
228*600f14f4SXin Li{
229*600f14f4SXin Li	f="$1"
230*600f14f4SXin Li	extra="$2"
231*600f14f4SXin Li	echo $ECHO_N "round-trip test ($f) encode... " $ECHO_C
232*600f14f4SXin Li	run_flac --force --verify --channel-map=none --no-padding --lax -o rt.flac $extra $f || die "ERROR"
233*600f14f4SXin Li	echo $ECHO_N "decode... " $ECHO_C
234*600f14f4SXin Li	run_flac --force --decode --channel-map=none -o rt.rf64 $extra rt.flac || die "ERROR"
235*600f14f4SXin Li	echo $ECHO_N "compare... " $ECHO_C
236*600f14f4SXin Li	cmp $f rt.rf64 || die "ERROR: file mismatch"
237*600f14f4SXin Li	echo "OK"
238*600f14f4SXin Li	rm -f rt.flac rt.rf64
239*600f14f4SXin Li}
240*600f14f4SXin Li
241*600f14f4SXin Lirt_test_rf64_autokf ()
242*600f14f4SXin Li{
243*600f14f4SXin Li	f="$1"
244*600f14f4SXin Li	extra="$2"
245*600f14f4SXin Li	echo $ECHO_N "round-trip test ($f) encode... " $ECHO_C
246*600f14f4SXin Li	run_flac --force --verify --channel-map=none --no-padding --lax -o rt.flac $extra $f || die "ERROR"
247*600f14f4SXin Li	echo $ECHO_N "decode... " $ECHO_C
248*600f14f4SXin Li	run_flac --force --decode --channel-map=none $extra rt.flac || die "ERROR"
249*600f14f4SXin Li	echo $ECHO_N "compare... " $ECHO_C
250*600f14f4SXin Li	cmp $f rt.rf64 || die "ERROR: file mismatch"
251*600f14f4SXin Li	echo "OK"
252*600f14f4SXin Li	rm -f rt.flac rt.rf64
253*600f14f4SXin Li}
254*600f14f4SXin Li
255*600f14f4SXin Lirt_test_aiff ()
256*600f14f4SXin Li{
257*600f14f4SXin Li	f="$1"
258*600f14f4SXin Li	extra="$2"
259*600f14f4SXin Li	echo $ECHO_N "round-trip test ($f) encode... " $ECHO_C
260*600f14f4SXin Li	run_flac --force --verify --channel-map=none --no-padding --lax -o rt.flac $extra $f || die "ERROR"
261*600f14f4SXin Li	echo $ECHO_N "decode... " $ECHO_C
262*600f14f4SXin Li	run_flac --force --decode --channel-map=none -o rt.aiff $extra rt.flac || die "ERROR"
263*600f14f4SXin Li	echo $ECHO_N "compare... " $ECHO_C
264*600f14f4SXin Li	cmp $f rt.aiff || die "ERROR: file mismatch"
265*600f14f4SXin Li	echo "OK"
266*600f14f4SXin Li	rm -f rt.flac rt.aiff
267*600f14f4SXin Li}
268*600f14f4SXin Li
269*600f14f4SXin Lirt_test_autokf ()
270*600f14f4SXin Li{
271*600f14f4SXin Li	f="$1"
272*600f14f4SXin Li	extra="$2"
273*600f14f4SXin Li	echo $ECHO_N "round-trip test ($f) encode... " $ECHO_C
274*600f14f4SXin Li	run_flac --force --verify --no-padding --lax -o rt.flac $extra $f || die "ERROR"
275*600f14f4SXin Li	echo $ECHO_N "decode... " $ECHO_C
276*600f14f4SXin Li	run_flac --force --decode $extra rt.flac || die "ERROR"
277*600f14f4SXin Li	echo $ECHO_N "compare... " $ECHO_C
278*600f14f4SXin Li	cmp $f $3 || die "ERROR: file mismatch"
279*600f14f4SXin Li	echo "OK"
280*600f14f4SXin Li	rm -f rt.flac $3
281*600f14f4SXin Li}
282*600f14f4SXin Li
283*600f14f4SXin Li# assumes input file is WAVE; does not check the metadata-preserving features of flac-to-flac; that is checked later
284*600f14f4SXin Lirt_test_flac ()
285*600f14f4SXin Li{
286*600f14f4SXin Li	f="$1"
287*600f14f4SXin Li	extra="$2"
288*600f14f4SXin Li	echo $ECHO_N "round-trip test ($f->flac->flac->wav) encode... " $ECHO_C
289*600f14f4SXin Li	run_flac --force --verify --channel-map=none --no-padding --lax -o rt.flac $extra $f || die "ERROR"
290*600f14f4SXin Li	echo $ECHO_N "re-encode... " $ECHO_C
291*600f14f4SXin Li	run_flac --force --verify --lax -o rt2.flac rt.flac || die "ERROR"
292*600f14f4SXin Li	echo $ECHO_N "decode... " $ECHO_C
293*600f14f4SXin Li	run_flac --force --decode --channel-map=none -o rt.wav $extra rt2.flac || die "ERROR"
294*600f14f4SXin Li	echo $ECHO_N "compare... " $ECHO_C
295*600f14f4SXin Li	cmp $f rt.wav || die "ERROR: file mismatch"
296*600f14f4SXin Li	echo "OK"
297*600f14f4SXin Li	rm -f rt.wav rt.flac rt2.flac
298*600f14f4SXin Li}
299*600f14f4SXin Li
300*600f14f4SXin Li# assumes input file is WAVE; does not check the metadata-preserving features of flac-to-flac; that is checked later
301*600f14f4SXin Lirt_test_ogg_flac ()
302*600f14f4SXin Li{
303*600f14f4SXin Li	f="$1"
304*600f14f4SXin Li	extra="$2"
305*600f14f4SXin Li	echo $ECHO_N "round-trip test ($f->oggflac->oggflac->wav) encode... " $ECHO_C
306*600f14f4SXin Li	run_flac --force --verify --channel-map=none --no-padding --lax -o rt.oga --ogg $extra $f || die "ERROR"
307*600f14f4SXin Li	echo $ECHO_N "re-encode... " $ECHO_C
308*600f14f4SXin Li	run_flac --force --verify --lax -o rt2.oga --ogg rt.oga || die "ERROR"
309*600f14f4SXin Li	echo $ECHO_N "decode... " $ECHO_C
310*600f14f4SXin Li	run_flac --force --decode --channel-map=none -o rt.wav $extra rt2.oga || die "ERROR"
311*600f14f4SXin Li	echo $ECHO_N "compare... " $ECHO_C
312*600f14f4SXin Li	cmp $f rt.wav || die "ERROR: file mismatch"
313*600f14f4SXin Li	echo "OK"
314*600f14f4SXin Li	rm -f rt.wav rt.oga rt2.oga
315*600f14f4SXin Li}
316*600f14f4SXin Li
317*600f14f4SXin Lifor f in rt-*.raw ; do
318*600f14f4SXin Li	rt_test_raw $f
319*600f14f4SXin Lidone
320*600f14f4SXin Lifor f in rt-*.wav ; do
321*600f14f4SXin Li	rt_test_wav $f
322*600f14f4SXin Lidone
323*600f14f4SXin Lifor f in rt-*.w64 ; do
324*600f14f4SXin Li	rt_test_w64 $f
325*600f14f4SXin Lidone
326*600f14f4SXin Lifor f in rt-*.rf64 ; do
327*600f14f4SXin Li	rt_test_rf64 $f
328*600f14f4SXin Lidone
329*600f14f4SXin Lifor f in rt-*.aiff ; do
330*600f14f4SXin Li	rt_test_aiff $f
331*600f14f4SXin Lidone
332*600f14f4SXin Lifor f in rt-*.wav ; do
333*600f14f4SXin Li	rt_test_flac $f
334*600f14f4SXin Lidone
335*600f14f4SXin Liif [ $has_ogg = yes ] ; then
336*600f14f4SXin Li	for f in rt-*.wav ; do
337*600f14f4SXin Li		rt_test_ogg_flac $f
338*600f14f4SXin Li	done
339*600f14f4SXin Lifi
340*600f14f4SXin Li
341*600f14f4SXin Li############################################################################
342*600f14f4SXin Li# test --skip and --until
343*600f14f4SXin Li############################################################################
344*600f14f4SXin Li
345*600f14f4SXin Li#
346*600f14f4SXin Li# first make some chopped-up raw files
347*600f14f4SXin Li#
348*600f14f4SXin Liecho "abcdefghijklmnopqrstuvwxyz1234567890ABCDEFGHIJKLMN" > master.raw
349*600f14f4SXin Lidd if=master.raw ibs=1 count=50 of=50c.raw 2>/dev/null || $dddie
350*600f14f4SXin Lidd if=master.raw ibs=1 skip=10 count=40 of=50c.skip10.raw 2>/dev/null || $dddie
351*600f14f4SXin Lidd if=master.raw ibs=1 skip=11 count=39 of=50c.skip11.raw 2>/dev/null || $dddie
352*600f14f4SXin Lidd if=master.raw ibs=1 skip=20 count=30 of=50c.skip20.raw 2>/dev/null || $dddie
353*600f14f4SXin Lidd if=master.raw ibs=1 skip=30 count=20 of=50c.skip30.raw 2>/dev/null || $dddie
354*600f14f4SXin Lidd if=master.raw ibs=1 skip=40 count=10 of=50c.skip40.raw 2>/dev/null || $dddie
355*600f14f4SXin Lidd if=master.raw ibs=1 count=10 of=50c.until10.raw 2>/dev/null || $dddie
356*600f14f4SXin Lidd if=master.raw ibs=1 count=20 of=50c.until20.raw 2>/dev/null || $dddie
357*600f14f4SXin Lidd if=master.raw ibs=1 count=30 of=50c.until30.raw 2>/dev/null || $dddie
358*600f14f4SXin Lidd if=master.raw ibs=1 count=39 of=50c.until39.raw 2>/dev/null || $dddie
359*600f14f4SXin Lidd if=master.raw ibs=1 count=40 of=50c.until40.raw 2>/dev/null || $dddie
360*600f14f4SXin Lidd if=master.raw ibs=1 skip=10 count=20 of=50c.skip10.until30.raw 2>/dev/null || $dddie
361*600f14f4SXin Lidd if=master.raw ibs=1 skip=10 count=29 of=50c.skip10.until39.raw 2>/dev/null || $dddie
362*600f14f4SXin Lidd if=master.raw ibs=1 skip=10 count=30 of=50c.skip10.until40.raw 2>/dev/null || $dddie
363*600f14f4SXin Lidd if=master.raw ibs=1 skip=20 count=10 of=50c.skip20.until30.raw 2>/dev/null || $dddie
364*600f14f4SXin Lidd if=master.raw ibs=1 skip=20 count=20 of=50c.skip20.until40.raw 2>/dev/null || $dddie
365*600f14f4SXin Li
366*600f14f4SXin Liwav_eopt="--force --verify --no-padding --lax"
367*600f14f4SXin Liwav_dopt="--force --decode"
368*600f14f4SXin Li
369*600f14f4SXin Liraw_eopt="$wav_eopt --force-raw-format --endian=big --sign=signed --sample-rate=10 --bps=8 --channels=1"
370*600f14f4SXin Liraw_dopt="$wav_dopt --force-raw-format --endian=big --sign=signed"
371*600f14f4SXin Li
372*600f14f4SXin Li#
373*600f14f4SXin Li# convert them to WAVE/AIFF/Ogg FLAC files
374*600f14f4SXin Li#
375*600f14f4SXin Liconvert_to_wav ()
376*600f14f4SXin Li{
377*600f14f4SXin Li	run_flac "$2" $1.raw || die "ERROR converting $1.raw to WAVE"
378*600f14f4SXin Li	run_flac "$3" $1.flac || die "ERROR converting $1.raw to WAVE"
379*600f14f4SXin Li}
380*600f14f4SXin Liconvert_to_wav 50c "$raw_eopt" "$wav_dopt"
381*600f14f4SXin Liconvert_to_wav 50c.skip10 "$raw_eopt" "$wav_dopt"
382*600f14f4SXin Liconvert_to_wav 50c.skip11 "$raw_eopt" "$wav_dopt"
383*600f14f4SXin Liconvert_to_wav 50c.skip20 "$raw_eopt" "$wav_dopt"
384*600f14f4SXin Liconvert_to_wav 50c.skip30 "$raw_eopt" "$wav_dopt"
385*600f14f4SXin Liconvert_to_wav 50c.skip40 "$raw_eopt" "$wav_dopt"
386*600f14f4SXin Liconvert_to_wav 50c.until10 "$raw_eopt" "$wav_dopt"
387*600f14f4SXin Liconvert_to_wav 50c.until20 "$raw_eopt" "$wav_dopt"
388*600f14f4SXin Liconvert_to_wav 50c.until30 "$raw_eopt" "$wav_dopt"
389*600f14f4SXin Liconvert_to_wav 50c.until39 "$raw_eopt" "$wav_dopt"
390*600f14f4SXin Liconvert_to_wav 50c.until40 "$raw_eopt" "$wav_dopt"
391*600f14f4SXin Liconvert_to_wav 50c.skip10.until30 "$raw_eopt" "$wav_dopt"
392*600f14f4SXin Liconvert_to_wav 50c.skip10.until39 "$raw_eopt" "$wav_dopt"
393*600f14f4SXin Liconvert_to_wav 50c.skip10.until40 "$raw_eopt" "$wav_dopt"
394*600f14f4SXin Liconvert_to_wav 50c.skip20.until30 "$raw_eopt" "$wav_dopt"
395*600f14f4SXin Liconvert_to_wav 50c.skip20.until40 "$raw_eopt" "$wav_dopt"
396*600f14f4SXin Li
397*600f14f4SXin Liconvert_to_aiff ()
398*600f14f4SXin Li{
399*600f14f4SXin Li	run_flac "$2" $1.raw || die "ERROR converting $1.raw to AIFF"
400*600f14f4SXin Li	run_flac "$3" $1.flac -o $1.aiff || die "ERROR converting $1.raw to AIFF"
401*600f14f4SXin Li}
402*600f14f4SXin Liconvert_to_aiff 50c "$raw_eopt" "$wav_dopt"
403*600f14f4SXin Liconvert_to_aiff 50c.skip10 "$raw_eopt" "$wav_dopt"
404*600f14f4SXin Liconvert_to_aiff 50c.skip11 "$raw_eopt" "$wav_dopt"
405*600f14f4SXin Liconvert_to_aiff 50c.skip20 "$raw_eopt" "$wav_dopt"
406*600f14f4SXin Liconvert_to_aiff 50c.skip30 "$raw_eopt" "$wav_dopt"
407*600f14f4SXin Liconvert_to_aiff 50c.skip40 "$raw_eopt" "$wav_dopt"
408*600f14f4SXin Liconvert_to_aiff 50c.until10 "$raw_eopt" "$wav_dopt"
409*600f14f4SXin Liconvert_to_aiff 50c.until20 "$raw_eopt" "$wav_dopt"
410*600f14f4SXin Liconvert_to_aiff 50c.until30 "$raw_eopt" "$wav_dopt"
411*600f14f4SXin Liconvert_to_aiff 50c.until39 "$raw_eopt" "$wav_dopt"
412*600f14f4SXin Liconvert_to_aiff 50c.until40 "$raw_eopt" "$wav_dopt"
413*600f14f4SXin Liconvert_to_aiff 50c.skip10.until30 "$raw_eopt" "$wav_dopt"
414*600f14f4SXin Liconvert_to_aiff 50c.skip10.until39 "$raw_eopt" "$wav_dopt"
415*600f14f4SXin Liconvert_to_aiff 50c.skip10.until40 "$raw_eopt" "$wav_dopt"
416*600f14f4SXin Liconvert_to_aiff 50c.skip20.until30 "$raw_eopt" "$wav_dopt"
417*600f14f4SXin Liconvert_to_aiff 50c.skip20.until40 "$raw_eopt" "$wav_dopt"
418*600f14f4SXin Li
419*600f14f4SXin Liconvert_to_ogg ()
420*600f14f4SXin Li{
421*600f14f4SXin Li	run_flac "$wav_eopt" --ogg $1.wav || die "ERROR converting $1.raw to Ogg FLAC"
422*600f14f4SXin Li}
423*600f14f4SXin Liif [ $has_ogg = yes ] ; then
424*600f14f4SXin Li	convert_to_ogg 50c
425*600f14f4SXin Li	convert_to_ogg 50c.skip10
426*600f14f4SXin Li	convert_to_ogg 50c.skip11
427*600f14f4SXin Li	convert_to_ogg 50c.skip20
428*600f14f4SXin Li	convert_to_ogg 50c.skip30
429*600f14f4SXin Li	convert_to_ogg 50c.skip40
430*600f14f4SXin Li	convert_to_ogg 50c.until10
431*600f14f4SXin Li	convert_to_ogg 50c.until20
432*600f14f4SXin Li	convert_to_ogg 50c.until30
433*600f14f4SXin Li	convert_to_ogg 50c.until39
434*600f14f4SXin Li	convert_to_ogg 50c.until40
435*600f14f4SXin Li	convert_to_ogg 50c.skip10.until30
436*600f14f4SXin Li	convert_to_ogg 50c.skip10.until39
437*600f14f4SXin Li	convert_to_ogg 50c.skip10.until40
438*600f14f4SXin Li	convert_to_ogg 50c.skip20.until30
439*600f14f4SXin Li	convert_to_ogg 50c.skip20.until40
440*600f14f4SXin Lifi
441*600f14f4SXin Li
442*600f14f4SXin Litest_skip_until ()
443*600f14f4SXin Li{
444*600f14f4SXin Li	in_fmt=$1
445*600f14f4SXin Li	out_fmt=$2
446*600f14f4SXin Li
447*600f14f4SXin Li	[ "$in_fmt" = wav ] || [ "$in_fmt" = aiff ] || [ "$in_fmt" = raw ] || [ "$in_fmt" = flac ] || [ "$in_fmt" = ogg ] || die "ERROR: internal error, bad 'in' format '$in_fmt'"
448*600f14f4SXin Li
449*600f14f4SXin Li	[ "$out_fmt" = flac ] || [ "$out_fmt" = ogg ] || die "ERROR: internal error, bad 'out' format '$out_fmt'"
450*600f14f4SXin Li
451*600f14f4SXin Li	if [ $in_fmt = raw ] ; then
452*600f14f4SXin Li		eopt="$raw_eopt"
453*600f14f4SXin Li		dopt="$raw_dopt"
454*600f14f4SXin Li	else
455*600f14f4SXin Li		eopt="$wav_eopt"
456*600f14f4SXin Li		dopt="$wav_dopt"
457*600f14f4SXin Li	fi
458*600f14f4SXin Li
459*600f14f4SXin Li	if [ $in_fmt = flac -o $in_fmt = ogg ] && [ $out_fmt = flac -o $out_fmt = ogg ]; then
460*600f14f4SXin Li		CMP=md5cmp
461*600f14f4SXin Li	else
462*600f14f4SXin Li		CMP=cmp
463*600f14f4SXin Li	fi
464*600f14f4SXin Li
465*600f14f4SXin Li	if [ $out_fmt = ogg ] ; then
466*600f14f4SXin Li		eopt="--ogg $eopt"
467*600f14f4SXin Li	fi
468*600f14f4SXin Li
469*600f14f4SXin Li	#
470*600f14f4SXin Li	# test --skip when encoding
471*600f14f4SXin Li	#
472*600f14f4SXin Li
473*600f14f4SXin Li	desc="($in_fmt<->$out_fmt)"
474*600f14f4SXin Li
475*600f14f4SXin Li	echo $ECHO_N "testing --skip=# (encode) $desc... " $ECHO_C
476*600f14f4SXin Li	run_flac $eopt --skip=10 -o z50c.skip10.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
477*600f14f4SXin Li	[ $in_fmt = $out_fmt ] || run_flac $dopt -o z50c.skip10.$in_fmt z50c.skip10.$out_fmt || die "ERROR decoding FLAC file $desc"
478*600f14f4SXin Li	$CMP 50c.skip10.$in_fmt z50c.skip10.$in_fmt || die "ERROR: file mismatch for --skip=10 (encode) $desc"
479*600f14f4SXin Li	rm -f z50c.skip10.$out_fmt z50c.skip10.$in_fmt
480*600f14f4SXin Li	echo OK
481*600f14f4SXin Li
482*600f14f4SXin Li	echo $ECHO_N "testing --skip=mm:ss (encode) $desc... " $ECHO_C
483*600f14f4SXin Li	run_flac $eopt --skip=0:01 -o z50c.skip0_01.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
484*600f14f4SXin Li
485*600f14f4SXin Li	[ $in_fmt = $out_fmt ] || run_flac $dopt -o z50c.skip0_01.$in_fmt z50c.skip0_01.$out_fmt || die "ERROR decoding FLAC file $desc"
486*600f14f4SXin Li	$CMP 50c.skip10.$in_fmt z50c.skip0_01.$in_fmt || die "ERROR: file mismatch for --skip=0:01 (encode) $desc"
487*600f14f4SXin Li	rm -f z50c.skip0_01.$out_fmt z50c.skip0_01.$in_fmt
488*600f14f4SXin Li	echo OK
489*600f14f4SXin Li
490*600f14f4SXin Li	echo $ECHO_N "testing --skip=mm:ss.sss (encode) $desc... " $ECHO_C
491*600f14f4SXin Li	run_flac $eopt --skip=0:01.1001 -o z50c.skip0_01.1001.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
492*600f14f4SXin Li	[ $in_fmt = $out_fmt ] || run_flac $dopt -o z50c.skip0_01.1001.$in_fmt z50c.skip0_01.1001.$out_fmt || die "ERROR decoding FLAC file $desc"
493*600f14f4SXin Li	$CMP 50c.skip11.$in_fmt z50c.skip0_01.1001.$in_fmt || die "ERROR: file mismatch for --skip=0:01.1001 (encode) $desc"
494*600f14f4SXin Li	rm -f z50c.skip0_01.1001.$out_fmt z50c.skip0_01.1001.$in_fmt
495*600f14f4SXin Li	echo OK
496*600f14f4SXin Li
497*600f14f4SXin Li	#
498*600f14f4SXin Li	# test --skip when decoding
499*600f14f4SXin Li	#
500*600f14f4SXin Li
501*600f14f4SXin Li	if [ $in_fmt != $out_fmt ] ; then run_flac $eopt -o z50c.$out_fmt 50c.$in_fmt ; else cp -f 50c.$in_fmt z50c.$out_fmt ; fi || die "ERROR generating FLAC file $desc"
502*600f14f4SXin Li
503*600f14f4SXin Li	echo $ECHO_N "testing --skip=# (decode) $desc... " $ECHO_C
504*600f14f4SXin Li	run_flac $dopt --skip=10 -o z50c.skip10.$in_fmt z50c.$out_fmt || die "ERROR decoding FLAC file $desc"
505*600f14f4SXin Li	$CMP 50c.skip10.$in_fmt z50c.skip10.$in_fmt || die "ERROR: file mismatch for --skip=10 (decode) $desc"
506*600f14f4SXin Li	rm -f z50c.skip10.$in_fmt
507*600f14f4SXin Li	echo OK
508*600f14f4SXin Li
509*600f14f4SXin Li	echo $ECHO_N "testing --skip=mm:ss (decode) $desc... " $ECHO_C
510*600f14f4SXin Li	run_flac $dopt --skip=0:01 -o z50c.skip0_01.$in_fmt z50c.$out_fmt || die "ERROR decoding FLAC file $desc"
511*600f14f4SXin Li	$CMP 50c.skip10.$in_fmt z50c.skip0_01.$in_fmt || die "ERROR: file mismatch for --skip=0:01 (decode) $desc"
512*600f14f4SXin Li	rm -f z50c.skip0_01.$in_fmt
513*600f14f4SXin Li	echo OK
514*600f14f4SXin Li
515*600f14f4SXin Li	echo $ECHO_N "testing --skip=mm:ss.sss (decode) $desc... " $ECHO_C
516*600f14f4SXin Li	run_flac $dopt --skip=0:01.1001 -o z50c.skip0_01.1001.$in_fmt z50c.$out_fmt || die "ERROR decoding FLAC file $desc"
517*600f14f4SXin Li	$CMP 50c.skip11.$in_fmt z50c.skip0_01.1001.$in_fmt || die "ERROR: file mismatch for --skip=0:01.1001 (decode) $desc"
518*600f14f4SXin Li	rm -f z50c.skip0_01.1001.$in_fmt
519*600f14f4SXin Li	echo OK
520*600f14f4SXin Li
521*600f14f4SXin Li	rm -f z50c.$out_fmt
522*600f14f4SXin Li
523*600f14f4SXin Li	#
524*600f14f4SXin Li	# test --until when encoding
525*600f14f4SXin Li	#
526*600f14f4SXin Li
527*600f14f4SXin Li	echo $ECHO_N "testing --until=# (encode) $desc... " $ECHO_C
528*600f14f4SXin Li	run_flac $eopt --until=40 -o z50c.until40.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
529*600f14f4SXin Li	[ $in_fmt = $out_fmt ] || run_flac $dopt -o z50c.until40.$in_fmt z50c.until40.$out_fmt || die "ERROR decoding FLAC file $desc"
530*600f14f4SXin Li	$CMP 50c.until40.$in_fmt z50c.until40.$in_fmt || die "ERROR: file mismatch for --until=40 (encode) $desc"
531*600f14f4SXin Li	rm -f z50c.until40.$out_fmt z50c.until40.$in_fmt
532*600f14f4SXin Li	echo OK
533*600f14f4SXin Li
534*600f14f4SXin Li	echo $ECHO_N "testing --until=mm:ss (encode) $desc... " $ECHO_C
535*600f14f4SXin Li	run_flac $eopt --until=0:04 -o z50c.until0_04.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
536*600f14f4SXin Li	[ $in_fmt = $out_fmt ] || run_flac $dopt -o z50c.until0_04.$in_fmt z50c.until0_04.$out_fmt || die "ERROR decoding FLAC file $desc"
537*600f14f4SXin Li	$CMP 50c.until40.$in_fmt z50c.until0_04.$in_fmt || die "ERROR: file mismatch for --until=0:04 (encode) $desc"
538*600f14f4SXin Li	rm -f z50c.until0_04.$out_fmt z50c.until0_04.$in_fmt
539*600f14f4SXin Li	echo OK
540*600f14f4SXin Li
541*600f14f4SXin Li	echo $ECHO_N "testing --until=mm:ss.sss (encode) $desc... " $ECHO_C
542*600f14f4SXin Li	run_flac $eopt --until=0:03.9001 -o z50c.until0_03.9001.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
543*600f14f4SXin Li	[ $in_fmt = $out_fmt ] || run_flac $dopt -o z50c.until0_03.9001.$in_fmt z50c.until0_03.9001.$out_fmt || die "ERROR decoding FLAC file $desc"
544*600f14f4SXin Li	$CMP 50c.until39.$in_fmt z50c.until0_03.9001.$in_fmt || die "ERROR: file mismatch for --until=0:03.9001 (encode) $desc"
545*600f14f4SXin Li	rm -f z50c.until0_03.9001.$out_fmt z50c.until0_03.9001.$in_fmt
546*600f14f4SXin Li	echo OK
547*600f14f4SXin Li
548*600f14f4SXin Li	echo $ECHO_N "testing --until=-# (encode) $desc... " $ECHO_C
549*600f14f4SXin Li	run_flac $eopt --until=-10 -o z50c.until-10.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
550*600f14f4SXin Li	[ $in_fmt = $out_fmt ] || run_flac $dopt -o z50c.until-10.$in_fmt z50c.until-10.$out_fmt || die "ERROR decoding FLAC file $desc"
551*600f14f4SXin Li	$CMP 50c.until40.$in_fmt z50c.until-10.$in_fmt || die "ERROR: file mismatch for --until=-10 (encode) $desc"
552*600f14f4SXin Li	rm -f z50c.until-10.$out_fmt z50c.until-10.$in_fmt
553*600f14f4SXin Li	echo OK
554*600f14f4SXin Li
555*600f14f4SXin Li	echo $ECHO_N "testing --until=-mm:ss (encode) $desc... " $ECHO_C
556*600f14f4SXin Li	run_flac $eopt --until=-0:01 -o z50c.until-0_01.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
557*600f14f4SXin Li	[ $in_fmt = $out_fmt ] || run_flac $dopt -o z50c.until-0_01.$in_fmt z50c.until-0_01.$out_fmt || die "ERROR decoding FLAC file $desc"
558*600f14f4SXin Li	$CMP 50c.until40.$in_fmt z50c.until-0_01.$in_fmt || die "ERROR: file mismatch for --until=-0:01 (encode) $desc"
559*600f14f4SXin Li	rm -f z50c.until-0_01.$out_fmt z50c.until-0_01.$in_fmt
560*600f14f4SXin Li	echo OK
561*600f14f4SXin Li
562*600f14f4SXin Li	echo $ECHO_N "testing --until=-mm:ss.sss (encode) $desc... " $ECHO_C
563*600f14f4SXin Li	run_flac $eopt --until=-0:01.1001 -o z50c.until-0_01.1001.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
564*600f14f4SXin Li	[ $in_fmt = $out_fmt ] || run_flac $dopt -o z50c.until-0_01.1001.$in_fmt z50c.until-0_01.1001.$out_fmt || die "ERROR decoding FLAC file $desc"
565*600f14f4SXin Li	$CMP 50c.until39.$in_fmt z50c.until-0_01.1001.$in_fmt || die "ERROR: file mismatch for --until=-0:01.1001 (encode) $desc"
566*600f14f4SXin Li	rm -f z50c.until-0_01.1001.$out_fmt z50c.until-0_01.1001.$in_fmt
567*600f14f4SXin Li	echo OK
568*600f14f4SXin Li
569*600f14f4SXin Li	#
570*600f14f4SXin Li	# test --until when decoding
571*600f14f4SXin Li	#
572*600f14f4SXin Li
573*600f14f4SXin Li	if [ $in_fmt != $out_fmt ] ; then run_flac $eopt -o z50c.$out_fmt 50c.$in_fmt ; else cp -f 50c.$in_fmt z50c.$out_fmt ; fi || die "ERROR generating FLAC file $desc"
574*600f14f4SXin Li
575*600f14f4SXin Li	echo $ECHO_N "testing --until=# (decode) $desc... " $ECHO_C
576*600f14f4SXin Li	run_flac $dopt --until=40 -o z50c.until40.$in_fmt z50c.$out_fmt || die "ERROR decoding FLAC file $desc"
577*600f14f4SXin Li	$CMP 50c.until40.$in_fmt z50c.until40.$in_fmt || die "ERROR: file mismatch for --until=40 (decode) $desc"
578*600f14f4SXin Li	rm -f z50c.until40.$in_fmt
579*600f14f4SXin Li	echo OK
580*600f14f4SXin Li
581*600f14f4SXin Li	echo $ECHO_N "testing --until=mm:ss (decode) $desc... " $ECHO_C
582*600f14f4SXin Li	run_flac $dopt --until=0:04 -o z50c.until0_04.$in_fmt z50c.$out_fmt || die "ERROR decoding FLAC file $desc"
583*600f14f4SXin Li	$CMP 50c.until40.$in_fmt z50c.until0_04.$in_fmt || die "ERROR: file mismatch for --until=0:04 (decode) $desc"
584*600f14f4SXin Li	rm -f z50c.until0_04.$in_fmt
585*600f14f4SXin Li	echo OK
586*600f14f4SXin Li
587*600f14f4SXin Li	echo $ECHO_N "testing --until=mm:ss.sss (decode) $desc... " $ECHO_C
588*600f14f4SXin Li	run_flac $dopt --until=0:03.9001 -o z50c.until0_03.9001.$in_fmt z50c.$out_fmt || die "ERROR decoding FLAC file $desc"
589*600f14f4SXin Li	$CMP 50c.until39.$in_fmt z50c.until0_03.9001.$in_fmt || die "ERROR: file mismatch for --until=0:03.9001 (decode) $desc"
590*600f14f4SXin Li	rm -f z50c.until0_03.9001.$in_fmt
591*600f14f4SXin Li	echo OK
592*600f14f4SXin Li
593*600f14f4SXin Li	echo $ECHO_N "testing --until=-# (decode) $desc... " $ECHO_C
594*600f14f4SXin Li	run_flac $dopt --until=-10 -o z50c.until-10.$in_fmt z50c.$out_fmt || die "ERROR decoding FLAC file $desc"
595*600f14f4SXin Li	$CMP 50c.until40.$in_fmt z50c.until-10.$in_fmt || die "ERROR: file mismatch for --until=-10 (decode) $desc"
596*600f14f4SXin Li	rm -f z50c.until-10.$in_fmt
597*600f14f4SXin Li	echo OK
598*600f14f4SXin Li
599*600f14f4SXin Li	echo $ECHO_N "testing --until=-mm:ss (decode) $desc... " $ECHO_C
600*600f14f4SXin Li	run_flac $dopt --until=-0:01 -o z50c.until-0_01.$in_fmt z50c.$out_fmt || die "ERROR decoding FLAC file $desc"
601*600f14f4SXin Li	$CMP 50c.until40.$in_fmt z50c.until-0_01.$in_fmt || die "ERROR: file mismatch for --until=-0:01 (decode) $desc"
602*600f14f4SXin Li	rm -f z50c.until-0_01.$in_fmt
603*600f14f4SXin Li	echo OK
604*600f14f4SXin Li
605*600f14f4SXin Li	echo $ECHO_N "testing --until=-mm:ss.sss (decode) $desc... " $ECHO_C
606*600f14f4SXin Li	run_flac $dopt --until=-0:01.1001 -o z50c.until-0_01.1001.$in_fmt z50c.$out_fmt || die "ERROR decoding FLAC file $desc"
607*600f14f4SXin Li	$CMP 50c.until39.$in_fmt z50c.until-0_01.1001.$in_fmt || die "ERROR: file mismatch for --until=-0:01.1001 (decode) $desc"
608*600f14f4SXin Li	rm -f z50c.until-0_01.1001.$in_fmt
609*600f14f4SXin Li	echo OK
610*600f14f4SXin Li
611*600f14f4SXin Li	rm -f z50c.$out_fmt
612*600f14f4SXin Li
613*600f14f4SXin Li	#
614*600f14f4SXin Li	# test --skip and --until when encoding
615*600f14f4SXin Li	#
616*600f14f4SXin Li
617*600f14f4SXin Li	echo $ECHO_N "testing --skip=10 --until=# (encode) $desc... " $ECHO_C
618*600f14f4SXin Li	run_flac $eopt --skip=10 --until=40 -o z50c.skip10.until40.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
619*600f14f4SXin Li	[ $in_fmt = $out_fmt ] || run_flac $dopt -o z50c.skip10.until40.$in_fmt z50c.skip10.until40.$out_fmt || die "ERROR decoding FLAC file $desc"
620*600f14f4SXin Li	$CMP 50c.skip10.until40.$in_fmt z50c.skip10.until40.$in_fmt || die "ERROR: file mismatch for --skip=10 --until=40 (encode) $desc"
621*600f14f4SXin Li	rm -f z50c.skip10.until40.$out_fmt z50c.skip10.until40.$in_fmt
622*600f14f4SXin Li	echo OK
623*600f14f4SXin Li
624*600f14f4SXin Li	echo $ECHO_N "testing --skip=10 --until=mm:ss (encode) $desc... " $ECHO_C
625*600f14f4SXin Li	run_flac $eopt --skip=10 --until=0:04 -o z50c.skip10.until0_04.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
626*600f14f4SXin Li	[ $in_fmt = $out_fmt ] || run_flac $dopt -o z50c.skip10.until0_04.$in_fmt z50c.skip10.until0_04.$out_fmt || die "ERROR decoding FLAC file $desc"
627*600f14f4SXin Li	$CMP 50c.skip10.until40.$in_fmt z50c.skip10.until0_04.$in_fmt || die "ERROR: file mismatch for --skip=10 --until=0:04 (encode) $desc"
628*600f14f4SXin Li	rm -f z50c.skip10.until0_04.$out_fmt z50c.skip10.until0_04.$in_fmt
629*600f14f4SXin Li	echo OK
630*600f14f4SXin Li
631*600f14f4SXin Li	echo $ECHO_N "testing --skip=10 --until=mm:ss.sss (encode) $desc... " $ECHO_C
632*600f14f4SXin Li	run_flac $eopt --skip=10 --until=0:03.9001 -o z50c.skip10.until0_03.9001.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
633*600f14f4SXin Li	[ $in_fmt = $out_fmt ] || run_flac $dopt -o z50c.skip10.until0_03.9001.$in_fmt z50c.skip10.until0_03.9001.$out_fmt || die "ERROR decoding FLAC file $desc"
634*600f14f4SXin Li	$CMP 50c.skip10.until39.$in_fmt z50c.skip10.until0_03.9001.$in_fmt || die "ERROR: file mismatch for --skip=10 --until=0:03.9001 (encode) $desc"
635*600f14f4SXin Li	rm -f z50c.skip10.until0_03.9001.$out_fmt z50c.skip10.until0_03.9001.$in_fmt
636*600f14f4SXin Li	echo OK
637*600f14f4SXin Li
638*600f14f4SXin Li	echo $ECHO_N "testing --skip=10 --until=+# (encode) $desc... " $ECHO_C
639*600f14f4SXin Li	run_flac $eopt --skip=10 --until=+30 -o z50c.skip10.until+30.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
640*600f14f4SXin Li	[ $in_fmt = $out_fmt ] || run_flac $dopt -o z50c.skip10.until+30.$in_fmt z50c.skip10.until+30.$out_fmt || die "ERROR decoding FLAC file $desc"
641*600f14f4SXin Li	$CMP 50c.skip10.until40.$in_fmt z50c.skip10.until+30.$in_fmt || die "ERROR: file mismatch for --skip=10 --until=+30 (encode) $desc"
642*600f14f4SXin Li	rm -f z50c.skip10.until+30.$out_fmt z50c.skip10.until+30.$in_fmt
643*600f14f4SXin Li	echo OK
644*600f14f4SXin Li
645*600f14f4SXin Li	echo $ECHO_N "testing --skip=10 --until=+mm:ss (encode) $desc... " $ECHO_C
646*600f14f4SXin Li	run_flac $eopt --skip=10 --until=+0:03 -o z50c.skip10.until+0_03.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
647*600f14f4SXin Li	[ $in_fmt = $out_fmt ] || run_flac $dopt -o z50c.skip10.until+0_03.$in_fmt z50c.skip10.until+0_03.$out_fmt || die "ERROR decoding FLAC file $desc"
648*600f14f4SXin Li	$CMP 50c.skip10.until40.$in_fmt z50c.skip10.until+0_03.$in_fmt || die "ERROR: file mismatch for --skip=10 --until=+0:03 (encode) $desc"
649*600f14f4SXin Li	rm -f z50c.skip10.until+0_03.$out_fmt z50c.skip10.until+0_03.$in_fmt
650*600f14f4SXin Li	echo OK
651*600f14f4SXin Li
652*600f14f4SXin Li	echo $ECHO_N "testing --skip=10 --until=+mm:ss.sss (encode) $desc... " $ECHO_C
653*600f14f4SXin Li	run_flac $eopt --skip=10 --until=+0:02.9001 -o z50c.skip10.until+0_02.9001.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
654*600f14f4SXin Li	[ $in_fmt = $out_fmt ] || run_flac $dopt -o z50c.skip10.until+0_02.9001.$in_fmt z50c.skip10.until+0_02.9001.$out_fmt || die "ERROR decoding FLAC file $desc"
655*600f14f4SXin Li	$CMP 50c.skip10.until39.$in_fmt z50c.skip10.until+0_02.9001.$in_fmt || die "ERROR: file mismatch for --skip=10 --until=+0:02.9001 (encode) $desc"
656*600f14f4SXin Li	rm -f z50c.skip10.until+0_02.9001.$out_fmt z50c.skip10.until+0_02.9001.$in_fmt
657*600f14f4SXin Li	echo OK
658*600f14f4SXin Li
659*600f14f4SXin Li	echo $ECHO_N "testing --skip=10 --until=-# (encode) $desc... " $ECHO_C
660*600f14f4SXin Li	run_flac $eopt --skip=10 --until=-10 -o z50c.skip10.until-10.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
661*600f14f4SXin Li	[ $in_fmt = $out_fmt ] || run_flac $dopt -o z50c.skip10.until-10.$in_fmt z50c.skip10.until-10.$out_fmt || die "ERROR decoding FLAC file $desc"
662*600f14f4SXin Li	$CMP 50c.skip10.until40.$in_fmt z50c.skip10.until-10.$in_fmt || die "ERROR: file mismatch for --skip=10 --until=-10 (encode) $desc"
663*600f14f4SXin Li	rm -f z50c.skip10.until-10.$out_fmt z50c.skip10.until-10.$in_fmt
664*600f14f4SXin Li	echo OK
665*600f14f4SXin Li
666*600f14f4SXin Li	echo $ECHO_N "testing --skip=10 --until=-mm:ss (encode) $desc... " $ECHO_C
667*600f14f4SXin Li	run_flac $eopt --skip=10 --until=-0:01 -o z50c.skip10.until-0_01.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
668*600f14f4SXin Li	[ $in_fmt = $out_fmt ] || run_flac $dopt -o z50c.skip10.until-0_01.$in_fmt z50c.skip10.until-0_01.$out_fmt || die "ERROR decoding FLAC file $desc"
669*600f14f4SXin Li	$CMP 50c.skip10.until40.$in_fmt z50c.skip10.until-0_01.$in_fmt || die "ERROR: file mismatch for --skip=10 --until=-0:01 (encode) $desc"
670*600f14f4SXin Li	rm -f z50c.skip10.until-0_01.$out_fmt z50c.skip10.until-0_01.$in_fmt
671*600f14f4SXin Li	echo OK
672*600f14f4SXin Li
673*600f14f4SXin Li	echo $ECHO_N "testing --skip=10 --until=-mm:ss.sss (encode) $desc... " $ECHO_C
674*600f14f4SXin Li	run_flac $eopt --skip=10 --until=-0:01.1001 -o z50c.skip10.until-0_01.1001.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
675*600f14f4SXin Li	[ $in_fmt = $out_fmt ] || run_flac $dopt -o z50c.skip10.until-0_01.1001.$in_fmt z50c.skip10.until-0_01.1001.$out_fmt || die "ERROR decoding FLAC file $desc"
676*600f14f4SXin Li	$CMP 50c.skip10.until39.$in_fmt z50c.skip10.until-0_01.1001.$in_fmt || die "ERROR: file mismatch for --skip=10 --until=-0:01.1001 (encode) $desc"
677*600f14f4SXin Li	rm -f z50c.skip10.until-0_01.1001.$out_fmt z50c.skip10.until-0_01.1001.$in_fmt
678*600f14f4SXin Li	echo OK
679*600f14f4SXin Li
680*600f14f4SXin Li	#
681*600f14f4SXin Li	# test --skip and --until when decoding
682*600f14f4SXin Li	#
683*600f14f4SXin Li
684*600f14f4SXin Li	if [ $in_fmt != $out_fmt ] ; then run_flac $eopt -o z50c.$out_fmt 50c.$in_fmt ; else cp -f 50c.$in_fmt z50c.$out_fmt ; fi || die "ERROR generating FLAC file $desc"
685*600f14f4SXin Li
686*600f14f4SXin Li
687*600f14f4SXin Li	echo $ECHO_N "testing --skip=10 --until=# (decode) $desc... " $ECHO_C
688*600f14f4SXin Li	run_flac $dopt --skip=10 --until=40 -o z50c.skip10.until40.$in_fmt z50c.$out_fmt || die "ERROR decoding FLAC file $desc"
689*600f14f4SXin Li	$CMP 50c.skip10.until40.$in_fmt z50c.skip10.until40.$in_fmt || die "ERROR: file mismatch for --skip=10 --until=40 (decode) $desc"
690*600f14f4SXin Li	rm -f z50c.skip10.until40.$in_fmt
691*600f14f4SXin Li	echo OK
692*600f14f4SXin Li
693*600f14f4SXin Li	echo $ECHO_N "testing --skip=10 --until=mm:ss (decode) $desc... " $ECHO_C
694*600f14f4SXin Li	run_flac $dopt --skip=10 --until=0:04 -o z50c.skip10.until0_04.$in_fmt z50c.$out_fmt || die "ERROR decoding FLAC file $desc"
695*600f14f4SXin Li	$CMP 50c.skip10.until40.$in_fmt z50c.skip10.until0_04.$in_fmt || die "ERROR: file mismatch for --skip=10 --until=0:04 (decode) $desc"
696*600f14f4SXin Li	rm -f z50c.skip10.until0_04.$in_fmt
697*600f14f4SXin Li	echo OK
698*600f14f4SXin Li
699*600f14f4SXin Li	echo $ECHO_N "testing --skip=10 --until=mm:ss.sss (decode) $desc... " $ECHO_C
700*600f14f4SXin Li	run_flac $dopt --skip=10 --until=0:03.9001 -o z50c.skip10.until0_03.9001.$in_fmt z50c.$out_fmt || die "ERROR decoding FLAC file $desc"
701*600f14f4SXin Li	$CMP 50c.skip10.until39.$in_fmt z50c.skip10.until0_03.9001.$in_fmt || die "ERROR: file mismatch for --skip=10 --until=0:03.9001 (decode) $desc"
702*600f14f4SXin Li	rm -f z50c.skip10.until0_03.9001.$in_fmt
703*600f14f4SXin Li	echo OK
704*600f14f4SXin Li
705*600f14f4SXin Li	echo $ECHO_N "testing --skip=10 --until=-# (decode) $desc... " $ECHO_C
706*600f14f4SXin Li	run_flac $dopt --skip=10 --until=-10 -o z50c.skip10.until-10.$in_fmt z50c.$out_fmt || die "ERROR decoding FLAC file $desc"
707*600f14f4SXin Li	$CMP 50c.skip10.until40.$in_fmt z50c.skip10.until-10.$in_fmt || die "ERROR: file mismatch for --skip=10 --until=-10 (decode) $desc"
708*600f14f4SXin Li	rm -f z50c.skip10.until-10.$in_fmt
709*600f14f4SXin Li	echo OK
710*600f14f4SXin Li
711*600f14f4SXin Li	echo $ECHO_N "testing --skip=10 --until=-mm:ss (decode) $desc... " $ECHO_C
712*600f14f4SXin Li	run_flac $dopt --skip=10 --until=-0:01 -o z50c.skip10.until-0_01.$in_fmt z50c.$out_fmt || die "ERROR decoding FLAC file $desc"
713*600f14f4SXin Li	$CMP 50c.skip10.until40.$in_fmt z50c.skip10.until-0_01.$in_fmt || die "ERROR: file mismatch for --skip=10 --until=-0:01 (decode) $desc"
714*600f14f4SXin Li	rm -f z50c.skip10.until-0_01.$in_fmt
715*600f14f4SXin Li	echo OK
716*600f14f4SXin Li
717*600f14f4SXin Li	echo $ECHO_N "testing --skip=10 --until=-mm:ss.sss (decode) $desc... " $ECHO_C
718*600f14f4SXin Li	run_flac $dopt --skip=10 --until=-0:01.1001 -o z50c.skip10.until-0_01.1001.$in_fmt z50c.$out_fmt || die "ERROR decoding FLAC file $desc"
719*600f14f4SXin Li	$CMP 50c.skip10.until39.$in_fmt z50c.skip10.until-0_01.1001.$in_fmt || die "ERROR: file mismatch for --skip=10 --until=-0:01.1001 (decode) $desc"
720*600f14f4SXin Li	rm -f z50c.skip10.until-0_01.1001.$in_fmt
721*600f14f4SXin Li	echo OK
722*600f14f4SXin Li
723*600f14f4SXin Li	rm -f z50c.$out_fmt
724*600f14f4SXin Li}
725*600f14f4SXin Li
726*600f14f4SXin Litest_skip_until raw flac
727*600f14f4SXin Litest_skip_until wav flac
728*600f14f4SXin Litest_skip_until aiff flac
729*600f14f4SXin Litest_skip_until flac flac
730*600f14f4SXin Li#@@@if [ $has_ogg = yes ] ; then
731*600f14f4SXin Li#@@@	#@@@ doesn't work yet because md5cmp doesn't work because metaflac doesn't work on ogg flac yet
732*600f14f4SXin Li#@@@	test_skip_until ogg flac
733*600f14f4SXin Li#@@@fi
734*600f14f4SXin Li
735*600f14f4SXin Liif [ $has_ogg = yes ] ; then
736*600f14f4SXin Li	test_skip_until raw ogg
737*600f14f4SXin Li	test_skip_until wav ogg
738*600f14f4SXin Li	test_skip_until aiff ogg
739*600f14f4SXin Li	#@@@ doesn't work yet because md5cmp doesn't work because metaflac doesn't work on ogg flac yet
740*600f14f4SXin Li	#@@@test_skip_until flac ogg
741*600f14f4SXin Li	#@@@test_skip_until ogg ogg
742*600f14f4SXin Lifi
743*600f14f4SXin Li
744*600f14f4SXin Liecho "testing seek extremes:"
745*600f14f4SXin Li
746*600f14f4SXin Lirun_flac --verify --force --no-padding --force-raw-format --endian=big --sign=signed --sample-rate=44100 --bps=16 --channels=2 --blocksize=576 noise.raw || die "ERROR generating FLAC file"
747*600f14f4SXin Li
748*600f14f4SXin Liif [ $is_win = no ] ; then
749*600f14f4SXin Li	total_noise_cdda_samples="$(run_metaflac --show-total-samples noise.flac)"
750*600f14f4SXin Li	[ $? = 0 ] || die "ERROR getting total sample count from noise.flac"
751*600f14f4SXin Lielse
752*600f14f4SXin Li	# some flavors of cygwin don't seem to treat the \x0d as a word
753*600f14f4SXin Li	# separator, so we hard code it.  we'll just have to fix it later
754*600f14f4SXin Li	# if we change the way noise.flac is made.
755*600f14f4SXin Li	total_noise_cdda_samples=393216
756*600f14f4SXin Lifi
757*600f14f4SXin Li
758*600f14f4SXin Liecho $ECHO_N "testing --skip=0... " $ECHO_C
759*600f14f4SXin Lirun_flac $wav_dopt --skip=0 -o z.wav noise.flac || die "ERROR decoding FLAC file noise.flac"
760*600f14f4SXin Liecho OK
761*600f14f4SXin Li
762*600f14f4SXin Lifor delta in 2 1 ; do
763*600f14f4SXin Li	n=$((total_noise_cdda_samples - delta))
764*600f14f4SXin Li	echo $ECHO_N "testing --skip=$n... " $ECHO_C
765*600f14f4SXin Li	run_flac $wav_dopt --skip=$n -o z.wav noise.flac || die "ERROR decoding FLAC file noise.flac"
766*600f14f4SXin Li	echo OK
767*600f14f4SXin Lidone
768*600f14f4SXin Li
769*600f14f4SXin Lirm noise.flac z.wav
770*600f14f4SXin Li
771*600f14f4SXin Li############################################################################
772*600f14f4SXin Li# test --input-size
773*600f14f4SXin Li############################################################################
774*600f14f4SXin Li
775*600f14f4SXin Li#@@@ cat will not work on old cygwin, need to fix
776*600f14f4SXin Liif [ $is_win = no ] ; then
777*600f14f4SXin Li	echo $ECHO_N "testing --input-size=50 --skip=10... " $ECHO_C
778*600f14f4SXin Li	run_flac $raw_eopt --input-size=50 --skip=10 -o z50c.skip10.flac - < 50c.raw || die "ERROR generating FLAC file"
779*600f14f4SXin Li	run_flac $raw_dopt -o z50c.skip10.raw z50c.skip10.flac || die "ERROR decoding FLAC file"
780*600f14f4SXin Li	cmp 50c.skip10.raw z50c.skip10.raw || die "ERROR: file mismatch for --input-size=50 --skip=10"
781*600f14f4SXin Li	rm -f z50c.skip10.raw z50c.skip10.flac
782*600f14f4SXin Li	echo OK
783*600f14f4SXin Lifi
784*600f14f4SXin Li
785*600f14f4SXin Li############################################################################
786*600f14f4SXin Li# test --output-prefix
787*600f14f4SXin Li############################################################################
788*600f14f4SXin Li
789*600f14f4SXin Liin_dir=./tmp_in
790*600f14f4SXin Liout_dir=./tmp_out
791*600f14f4SXin Limkdir $in_dir $out_dir || die "ERROR failed to create temp directories"
792*600f14f4SXin Li
793*600f14f4SXin Licp 50c.raw 50c.flac $in_dir
794*600f14f4SXin Li
795*600f14f4SXin Li#
796*600f14f4SXin Li# test --output-prefix when encoding
797*600f14f4SXin Li#
798*600f14f4SXin Li
799*600f14f4SXin Liecho $ECHO_N "testing --output-prefix=$out_dir/ (encode)... " $ECHO_C
800*600f14f4SXin Lirun_flac $raw_eopt --output-prefix=$out_dir/ $in_dir/50c.raw || die "ERROR generating FLAC file in $out_dir (encode)"
801*600f14f4SXin Li[ -f $out_dir/50c.flac ] || die "ERROR FLAC file not in $out_dir (encode)"
802*600f14f4SXin Lirun_flac $raw_dopt $out_dir/50c.flac || die "ERROR decoding FLAC file (encode)"
803*600f14f4SXin Li[ -f $out_dir/50c.raw ] || die "ERROR RAW file not in $out_dir (encode)"
804*600f14f4SXin Licmp 50c.raw $out_dir/50c.raw || die "ERROR: file mismatch for --output-prefix=$out_dir (encode)"
805*600f14f4SXin Lirm -f $out_dir/50c.flac $out_dir/50c.raw
806*600f14f4SXin Liecho OK
807*600f14f4SXin Li
808*600f14f4SXin Li#
809*600f14f4SXin Li# test --ouput-prefix when decoding
810*600f14f4SXin Li#
811*600f14f4SXin Li
812*600f14f4SXin Liecho $ECHO_N "testing --output-prefix=$out_dir/ (decode)... " $ECHO_C
813*600f14f4SXin Lirun_flac $raw_dopt --output-prefix=$out_dir/ $in_dir/50c.flac || die "ERROR deocding FLAC file in $out_dir (decode)"
814*600f14f4SXin Li[ -f $out_dir/50c.raw ] || die "ERROR RAW file not in $out_dir (decode)"
815*600f14f4SXin Lirun_flac $raw_eopt $out_dir/50c.raw || die "ERROR generating FLAC file (decode)"
816*600f14f4SXin Li[ -f $out_dir/50c.flac ] || die "ERROR FLAC file not in $out_dir (decode)"
817*600f14f4SXin Licmp 50c.flac $out_dir/50c.flac || die "ERROR: file mismatch for --output-prefix=$out_dir (decode)"
818*600f14f4SXin Lirm -f $out_dir/50c.flac $out_dir/50c.raw
819*600f14f4SXin Liecho OK
820*600f14f4SXin Li
821*600f14f4SXin Lirm -rf $in_dir $out_dir
822*600f14f4SXin Li
823*600f14f4SXin Li############################################################################
824*600f14f4SXin Li# test --cue
825*600f14f4SXin Li############################################################################
826*600f14f4SXin Li
827*600f14f4SXin Li#
828*600f14f4SXin Li# create the cue sheet
829*600f14f4SXin Li#
830*600f14f4SXin Licuesheet=cuetest.cue
831*600f14f4SXin Licat > $cuesheet << EOF
832*600f14f4SXin LiCATALOG 1234567890123
833*600f14f4SXin LiFILE "blah" WAVE
834*600f14f4SXin Li  TRACK 01 AUDIO
835*600f14f4SXin Li    INDEX 01 0
836*600f14f4SXin Li    INDEX 02 10
837*600f14f4SXin Li    INDEX 03 20
838*600f14f4SXin Li  TRACK 02 AUDIO
839*600f14f4SXin Li    INDEX 01 30
840*600f14f4SXin Li  TRACK 04 AUDIO
841*600f14f4SXin Li    INDEX 01 40
842*600f14f4SXin LiEOF
843*600f14f4SXin Li
844*600f14f4SXin Litest_cue ()
845*600f14f4SXin Li{
846*600f14f4SXin Li	in_fmt=$1
847*600f14f4SXin Li	out_fmt=$2
848*600f14f4SXin Li
849*600f14f4SXin Li	[ "$in_fmt" = wav ] || [ "$in_fmt" = aiff ] || [ "$in_fmt" = raw ] || [ "$in_fmt" = flac ] || [ "$in_fmt" = ogg ] || die "ERROR: internal error, bad 'in' format '$in_fmt'"
850*600f14f4SXin Li
851*600f14f4SXin Li	[ "$out_fmt" = flac ] || [ "$out_fmt" = ogg ] || die "ERROR: internal error, bad 'out' format '$out_fmt'"
852*600f14f4SXin Li
853*600f14f4SXin Li	if [ $in_fmt = raw ] ; then
854*600f14f4SXin Li		eopt="$raw_eopt"
855*600f14f4SXin Li		dopt="$raw_dopt"
856*600f14f4SXin Li	else
857*600f14f4SXin Li		eopt="$wav_eopt"
858*600f14f4SXin Li		dopt="$wav_dopt"
859*600f14f4SXin Li	fi
860*600f14f4SXin Li
861*600f14f4SXin Li	if [ $in_fmt = flac -o $in_fmt = ogg ] && [ $out_fmt = flac -o $out_fmt = ogg ]; then
862*600f14f4SXin Li		CMP=md5cmp
863*600f14f4SXin Li	else
864*600f14f4SXin Li		CMP=cmp
865*600f14f4SXin Li	fi
866*600f14f4SXin Li
867*600f14f4SXin Li	if [ $out_fmt = ogg ] ; then
868*600f14f4SXin Li		eopt="--ogg $eopt"
869*600f14f4SXin Li	fi
870*600f14f4SXin Li
871*600f14f4SXin Li	desc="($in_fmt<->$out_fmt)"
872*600f14f4SXin Li
873*600f14f4SXin Li	#
874*600f14f4SXin Li	# for this we need just need just one FLAC file; --cue only works while decoding
875*600f14f4SXin Li	#
876*600f14f4SXin Li	run_flac $eopt --cuesheet=$cuesheet -o z50c.cue.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
877*600f14f4SXin Li
878*600f14f4SXin Li	# To make it easy to translate from cue point to sample numbers, the
879*600f14f4SXin Li	# file has a sample rate of 10 Hz and a cuesheet like so:
880*600f14f4SXin Li	#
881*600f14f4SXin Li	# TRACK 01, INDEX 01 : 0:00.00 -> sample 0
882*600f14f4SXin Li	# TRACK 01, INDEX 02 : 0:01.00 -> sample 10
883*600f14f4SXin Li	# TRACK 01, INDEX 03 : 0:02.00 -> sample 20
884*600f14f4SXin Li	# TRACK 02, INDEX 01 : 0:03.00 -> sample 30
885*600f14f4SXin Li	# TRACK 04, INDEX 01 : 0:04.00 -> sample 40
886*600f14f4SXin Li	#
887*600f14f4SXin Li	echo $ECHO_N "testing --cue=- $desc... " $ECHO_C
888*600f14f4SXin Li	run_flac $dopt -o z50c.cued.$in_fmt --cue=- z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
889*600f14f4SXin Li	$CMP 50c.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=- $desc"
890*600f14f4SXin Li	rm -f z50c.cued.$in_fmt
891*600f14f4SXin Li	echo OK
892*600f14f4SXin Li
893*600f14f4SXin Li	echo $ECHO_N "testing --cue=1.0 $desc... " $ECHO_C
894*600f14f4SXin Li	run_flac $dopt -o z50c.cued.$in_fmt --cue=1.0 z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
895*600f14f4SXin Li	$CMP 50c.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=1.0 $desc"
896*600f14f4SXin Li	rm -f z50c.cued.$in_fmt
897*600f14f4SXin Li	echo OK
898*600f14f4SXin Li
899*600f14f4SXin Li	echo $ECHO_N "testing --cue=1.0- $desc... " $ECHO_C
900*600f14f4SXin Li	run_flac $dopt -o z50c.cued.$in_fmt --cue=1.0- z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
901*600f14f4SXin Li	$CMP 50c.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=1.0- $desc"
902*600f14f4SXin Li	rm -f z50c.cued.$in_fmt
903*600f14f4SXin Li	echo OK
904*600f14f4SXin Li
905*600f14f4SXin Li	echo $ECHO_N "testing --cue=1.1 $desc... " $ECHO_C
906*600f14f4SXin Li	run_flac $dopt -o z50c.cued.$in_fmt --cue=1.1 z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
907*600f14f4SXin Li	$CMP 50c.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=1.1 $desc"
908*600f14f4SXin Li	rm -f z50c.cued.$in_fmt
909*600f14f4SXin Li	echo OK
910*600f14f4SXin Li
911*600f14f4SXin Li	echo $ECHO_N "testing --cue=1.1- $desc... " $ECHO_C
912*600f14f4SXin Li	run_flac $dopt -o z50c.cued.$in_fmt --cue=1.1- z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
913*600f14f4SXin Li	$CMP 50c.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=1.1- $desc"
914*600f14f4SXin Li	rm -f z50c.cued.$in_fmt
915*600f14f4SXin Li	echo OK
916*600f14f4SXin Li
917*600f14f4SXin Li	echo $ECHO_N "testing --cue=1.2 $desc... " $ECHO_C
918*600f14f4SXin Li	run_flac $dopt -o z50c.cued.$in_fmt --cue=1.2 z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
919*600f14f4SXin Li	$CMP 50c.skip10.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=1.2 $desc"
920*600f14f4SXin Li	rm -f z50c.cued.$in_fmt
921*600f14f4SXin Li	echo OK
922*600f14f4SXin Li
923*600f14f4SXin Li	echo $ECHO_N "testing --cue=1.2- $desc... " $ECHO_C
924*600f14f4SXin Li	run_flac $dopt -o z50c.cued.$in_fmt --cue=1.2- z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
925*600f14f4SXin Li	$CMP 50c.skip10.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=1.2- $desc"
926*600f14f4SXin Li	rm -f z50c.cued.$in_fmt
927*600f14f4SXin Li	echo OK
928*600f14f4SXin Li
929*600f14f4SXin Li	echo $ECHO_N "testing --cue=1.4 $desc... " $ECHO_C
930*600f14f4SXin Li	run_flac $dopt -o z50c.cued.$in_fmt --cue=1.4 z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
931*600f14f4SXin Li	$CMP 50c.skip20.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=1.4 $desc"
932*600f14f4SXin Li	rm -f z50c.cued.$in_fmt
933*600f14f4SXin Li	echo OK
934*600f14f4SXin Li
935*600f14f4SXin Li	echo $ECHO_N "testing --cue=1.4- $desc... " $ECHO_C
936*600f14f4SXin Li	run_flac $dopt -o z50c.cued.$in_fmt --cue=1.4- z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
937*600f14f4SXin Li	$CMP 50c.skip20.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=1.4- $desc"
938*600f14f4SXin Li	rm -f z50c.cued.$in_fmt
939*600f14f4SXin Li	echo OK
940*600f14f4SXin Li
941*600f14f4SXin Li	echo $ECHO_N "testing --cue=-5.0 $desc... " $ECHO_C
942*600f14f4SXin Li	run_flac $dopt -o z50c.cued.$in_fmt --cue=-5.0 z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
943*600f14f4SXin Li	$CMP 50c.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=-5.0 $desc"
944*600f14f4SXin Li	rm -f z50c.cued.$in_fmt
945*600f14f4SXin Li	echo OK
946*600f14f4SXin Li
947*600f14f4SXin Li	echo $ECHO_N "testing --cue=-4.1 $desc... " $ECHO_C
948*600f14f4SXin Li	run_flac $dopt -o z50c.cued.$in_fmt --cue=-4.1 z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
949*600f14f4SXin Li	$CMP 50c.until40.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=-4.1 $desc"
950*600f14f4SXin Li	rm -f z50c.cued.$in_fmt
951*600f14f4SXin Li	echo OK
952*600f14f4SXin Li
953*600f14f4SXin Li	echo $ECHO_N "testing --cue=-3.1 $desc... " $ECHO_C
954*600f14f4SXin Li	run_flac $dopt -o z50c.cued.$in_fmt --cue=-3.1 z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
955*600f14f4SXin Li	$CMP 50c.until40.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=-3.1 $desc"
956*600f14f4SXin Li	rm -f z50c.cued.$in_fmt
957*600f14f4SXin Li	echo OK
958*600f14f4SXin Li
959*600f14f4SXin Li	echo $ECHO_N "testing --cue=-1.4 $desc... " $ECHO_C
960*600f14f4SXin Li	run_flac $dopt -o z50c.cued.$in_fmt --cue=-1.4 z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
961*600f14f4SXin Li	$CMP 50c.until30.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=-1.4 $desc"
962*600f14f4SXin Li	rm -f z50c.cued.$in_fmt
963*600f14f4SXin Li	echo OK
964*600f14f4SXin Li
965*600f14f4SXin Li	echo $ECHO_N "testing --cue=1.0-5.0 $desc... " $ECHO_C
966*600f14f4SXin Li	run_flac $dopt -o z50c.cued.$in_fmt --cue=1.0-5.0 z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
967*600f14f4SXin Li	$CMP 50c.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=1.0-5.0 $desc"
968*600f14f4SXin Li	rm -f z50c.cued.$in_fmt
969*600f14f4SXin Li	echo OK
970*600f14f4SXin Li
971*600f14f4SXin Li	echo $ECHO_N "testing --cue=1.1-5.0 $desc... " $ECHO_C
972*600f14f4SXin Li	run_flac $dopt -o z50c.cued.$in_fmt --cue=1.1-5.0 z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
973*600f14f4SXin Li	$CMP 50c.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=1.1-5.0 $desc"
974*600f14f4SXin Li	rm -f z50c.cued.$in_fmt
975*600f14f4SXin Li	echo OK
976*600f14f4SXin Li
977*600f14f4SXin Li	echo $ECHO_N "testing --cue=1.2-4.1 $desc... " $ECHO_C
978*600f14f4SXin Li	run_flac $dopt -o z50c.cued.$in_fmt --cue=1.2-4.1 z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
979*600f14f4SXin Li	$CMP 50c.skip10.until40.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=1.2-4.1 $desc"
980*600f14f4SXin Li	rm -f z50c.cued.$in_fmt
981*600f14f4SXin Li	echo OK
982*600f14f4SXin Li
983*600f14f4SXin Li	echo $ECHO_N "testing --cue=1.4-2.0 $desc... " $ECHO_C
984*600f14f4SXin Li	run_flac $dopt -o z50c.cued.$in_fmt --cue=1.4-2.0 z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
985*600f14f4SXin Li	$CMP 50c.skip20.until30.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=1.4-2.0 $desc"
986*600f14f4SXin Li	rm -f z50c.cued.$in_fmt
987*600f14f4SXin Li	echo OK
988*600f14f4SXin Li
989*600f14f4SXin Li	rm -f z50c.cue.$out_fmt
990*600f14f4SXin Li}
991*600f14f4SXin Li
992*600f14f4SXin Litest_cue raw flac
993*600f14f4SXin Litest_cue wav flac
994*600f14f4SXin Litest_cue aiff flac
995*600f14f4SXin Litest_cue flac flac
996*600f14f4SXin Li#@@@if [ $has_ogg = yes ] ; then
997*600f14f4SXin Li#@@@	#@@@ doesn't work yet because md5cmp doesn't work because metaflac doesn't work on ogg flac yet
998*600f14f4SXin Li#@@@	test_cue ogg flac
999*600f14f4SXin Li#@@@fi
1000*600f14f4SXin Li
1001*600f14f4SXin Liif [ $has_ogg = yes ] ; then
1002*600f14f4SXin Li	test_cue raw ogg
1003*600f14f4SXin Li	test_cue wav ogg
1004*600f14f4SXin Li	test_cue aiff ogg
1005*600f14f4SXin Li	#@@@ doesn't work yet because md5cmp doesn't work because metaflac doesn't work on ogg flac yet
1006*600f14f4SXin Li	#@@@test_cue flac ogg
1007*600f14f4SXin Li	#@@@test_cue ogg ogg
1008*600f14f4SXin Lifi
1009*600f14f4SXin Li
1010*600f14f4SXin Li############################################################################
1011*600f14f4SXin Li# test 'fixup' code that happens when a FLAC file with total_samples == 0
1012*600f14f4SXin Li# in the STREAMINFO block is converted to WAVE or AIFF, requiring the
1013*600f14f4SXin Li# decoder go back and fix up the chunk headers
1014*600f14f4SXin Li############################################################################
1015*600f14f4SXin Li
1016*600f14f4SXin Liecho $ECHO_N "WAVE fixup test... " $ECHO_C
1017*600f14f4SXin Li
1018*600f14f4SXin Liecho $ECHO_N "prepare... " $ECHO_C
1019*600f14f4SXin Liconvert_to_wav noise "$raw_eopt" "$wav_dopt" || die "ERROR creating reference WAVE"
1020*600f14f4SXin Li
1021*600f14f4SXin Liecho $ECHO_N "encode... " $ECHO_C
1022*600f14f4SXin Li# the pipe from 'cat' to 'flac' does not work on cygwin because of the EOF/
1023*600f14f4SXin Li# binary-mode stdin problem, so we use an undocumented option to metaflac to
1024*600f14f4SXin Li# set the total sample count to 0
1025*600f14f4SXin Liif [ $is_win = yes ] ; then
1026*600f14f4SXin Li	run_flac $raw_eopt noise.raw -o fixup.flac || die "ERROR generating FLAC file"
1027*600f14f4SXin Li	run_metaflac --set-total-samples=0 fixup.flac 2> /dev/null
1028*600f14f4SXin Lielse
1029*600f14f4SXin Li	run_flac $raw_eopt - -c < noise.raw > fixup.flac || die "ERROR generating FLAC file"
1030*600f14f4SXin Lifi
1031*600f14f4SXin Li
1032*600f14f4SXin Liecho $ECHO_N "decode... " $ECHO_C
1033*600f14f4SXin Lirun_flac $wav_dopt fixup.flac -o fixup.wav || die "ERROR decoding FLAC file"
1034*600f14f4SXin Li
1035*600f14f4SXin Liecho $ECHO_N "compare... " $ECHO_C
1036*600f14f4SXin Licmp noise.wav fixup.wav || die "ERROR: file mismatch"
1037*600f14f4SXin Li
1038*600f14f4SXin Liecho OK
1039*600f14f4SXin Lirm -f noise.wav fixup.wav fixup.flac
1040*600f14f4SXin Li
1041*600f14f4SXin Liecho $ECHO_N "AIFF fixup test... " $ECHO_C
1042*600f14f4SXin Li
1043*600f14f4SXin Liecho $ECHO_N "prepare... " $ECHO_C
1044*600f14f4SXin Liconvert_to_aiff noise "$raw_eopt" "$wav_dopt" || die "ERROR creating reference AIFF"
1045*600f14f4SXin Li
1046*600f14f4SXin Liecho $ECHO_N "encode... " $ECHO_C
1047*600f14f4SXin Li# the pipe from 'cat' to 'flac' does not work on cygwin because of the EOF/
1048*600f14f4SXin Li# binary-mode stdin problem, so we use an undocumented option to metaflac to
1049*600f14f4SXin Li# set the total sample count to 0
1050*600f14f4SXin Liif [ $is_win = yes ] ; then
1051*600f14f4SXin Li	run_flac $raw_eopt noise.raw -o fixup.flac || die "ERROR generating FLAC file"
1052*600f14f4SXin Li	run_metaflac --set-total-samples=0 fixup.flac 2> /dev/null
1053*600f14f4SXin Lielse
1054*600f14f4SXin Li	run_flac $raw_eopt - -c < noise.raw > fixup.flac || die "ERROR generating FLAC file"
1055*600f14f4SXin Lifi
1056*600f14f4SXin Li
1057*600f14f4SXin Liecho $ECHO_N "decode... " $ECHO_C
1058*600f14f4SXin Lirun_flac $wav_dopt fixup.flac -o fixup.aiff || die "ERROR decoding FLAC file"
1059*600f14f4SXin Li
1060*600f14f4SXin Liecho $ECHO_N "compare... " $ECHO_C
1061*600f14f4SXin Licmp noise.aiff fixup.aiff || die "ERROR: file mismatch"
1062*600f14f4SXin Li
1063*600f14f4SXin Liecho OK
1064*600f14f4SXin Lirm -f noise.aiff fixup.aiff fixup.flac
1065*600f14f4SXin Li
1066*600f14f4SXin Li
1067*600f14f4SXin Li############################################################################
1068*600f14f4SXin Li# multi-file tests
1069*600f14f4SXin Li############################################################################
1070*600f14f4SXin Li
1071*600f14f4SXin Liecho "Generating multiple input files from noise..."
1072*600f14f4SXin Limultifile_format_decode="--endian=big --sign=signed"
1073*600f14f4SXin Limultifile_format_encode="$multifile_format_decode --sample-rate=44100 --bps=16 --channels=2 --no-padding"
1074*600f14f4SXin Lishort_noise_cdda_samples=$((total_noise_cdda_samples / 8))
1075*600f14f4SXin Lirun_flac --verify --force --force-raw-format $multifile_format_encode --until=$short_noise_cdda_samples -o shortnoise.flac noise.raw || die "ERROR generating FLAC file"
1076*600f14f4SXin Lirun_flac --decode --force shortnoise.flac -o shortnoise.raw --force-raw-format $multifile_format_decode || die "ERROR generating RAW file"
1077*600f14f4SXin Lirun_flac --decode --force shortnoise.flac || die "ERROR generating WAVE file"
1078*600f14f4SXin Lirun_flac --decode --force shortnoise.flac -o shortnoise.aiff || die "ERROR generating AIFF file"
1079*600f14f4SXin Licp shortnoise.flac file0.flac
1080*600f14f4SXin Licp shortnoise.flac file1.flac
1081*600f14f4SXin Licp shortnoise.flac file2.flac
1082*600f14f4SXin Lirm -f shortnoise.flac
1083*600f14f4SXin Licp shortnoise.wav file0.wav
1084*600f14f4SXin Licp shortnoise.wav file1.wav
1085*600f14f4SXin Licp shortnoise.wav file2.wav
1086*600f14f4SXin Lirm -f shortnoise.wav
1087*600f14f4SXin Licp shortnoise.aiff file0.aiff
1088*600f14f4SXin Licp shortnoise.aiff file1.aiff
1089*600f14f4SXin Licp shortnoise.aiff file2.aiff
1090*600f14f4SXin Lirm -f shortnoise.aiff
1091*600f14f4SXin Licp shortnoise.raw file0.raw
1092*600f14f4SXin Licp shortnoise.raw file1.raw
1093*600f14f4SXin Licp shortnoise.raw file2.raw
1094*600f14f4SXin Lirm -f shortnoise.raw
1095*600f14f4SXin Li
1096*600f14f4SXin Litest_multifile ()
1097*600f14f4SXin Li{
1098*600f14f4SXin Li	input_type=$1
1099*600f14f4SXin Li	streamtype=$2
1100*600f14f4SXin Li	encode_options="$3"
1101*600f14f4SXin Li
1102*600f14f4SXin Li	extra_encode_options=""
1103*600f14f4SXin Li	extra_decode_options=""
1104*600f14f4SXin Li	if [ $input_type = "raw" ] ; then
1105*600f14f4SXin Li		extra_encode_options="--force-raw-format $multifile_format_encode"
1106*600f14f4SXin Li		extra_decode_options="--force-raw-format $multifile_format_decode"
1107*600f14f4SXin Li	else
1108*600f14f4SXin Li		if [ $input_type = "aiff" ] ; then
1109*600f14f4SXin Li			extra_decode_options="--force-aiff-format"
1110*600f14f4SXin Li		fi
1111*600f14f4SXin Li	fi
1112*600f14f4SXin Li
1113*600f14f4SXin Li	if [ $streamtype = ogg ] ; then
1114*600f14f4SXin Li		suffix=oga
1115*600f14f4SXin Li		encode_options="$encode_options --ogg"
1116*600f14f4SXin Li	else
1117*600f14f4SXin Li		suffix=flac
1118*600f14f4SXin Li	fi
1119*600f14f4SXin Li
1120*600f14f4SXin Li	if [ $input_type = flac ] || [ $input_type = ogg ] ; then
1121*600f14f4SXin Li		CMP=md5cmp
1122*600f14f4SXin Li	else
1123*600f14f4SXin Li		CMP=cmp
1124*600f14f4SXin Li	fi
1125*600f14f4SXin Li
1126*600f14f4SXin Li	for n in 0 1 2 ; do
1127*600f14f4SXin Li		cp file$n.$input_type file${n}x.$input_type
1128*600f14f4SXin Li	done
1129*600f14f4SXin Li	run_flac --force $encode_options $extra_encode_options file0x.$input_type file1x.$input_type file2x.$input_type || die "ERROR"
1130*600f14f4SXin Li	run_flac --force --decode $extra_decode_options file0x.$suffix file1x.$suffix file2x.$suffix || die "ERROR"
1131*600f14f4SXin Li	for n in 0 1 2 ; do
1132*600f14f4SXin Li		$CMP file$n.$input_type file${n}x.$input_type || die "ERROR: file mismatch on file #$n"
1133*600f14f4SXin Li	done
1134*600f14f4SXin Li	for n in 0 1 2 ; do
1135*600f14f4SXin Li		rm -f file${n}x.$suffix file${n}x.$input_type
1136*600f14f4SXin Li	done
1137*600f14f4SXin Li}
1138*600f14f4SXin Li
1139*600f14f4SXin Liinput_types="raw wav aiff flac"
1140*600f14f4SXin Li#@@@ doesn't work yet because md5cmp doesn't work because metaflac doesn't work on ogg flac yet
1141*600f14f4SXin Li#@@@if [ $has_ogg = yes ] ; then
1142*600f14f4SXin Li#@@@	input_types="$input_types ogg"
1143*600f14f4SXin Li#@@@fi
1144*600f14f4SXin Lifor input_type in $input_types ; do
1145*600f14f4SXin Li	echo "Testing multiple $input_type files without verify..."
1146*600f14f4SXin Li	test_multifile $input_type flac ""
1147*600f14f4SXin Li
1148*600f14f4SXin Li	echo "Testing multiple $input_type files with verify..."
1149*600f14f4SXin Li	test_multifile $input_type flac "--verify"
1150*600f14f4SXin Li
1151*600f14f4SXin Li	if [ $has_ogg = yes ] ; then
1152*600f14f4SXin Li		echo "Testing multiple $input_type files with --ogg, without verify..."
1153*600f14f4SXin Li		test_multifile $input_type ogg ""
1154*600f14f4SXin Li
1155*600f14f4SXin Li		echo "Testing multiple $input_type files with --ogg, with verify..."
1156*600f14f4SXin Li		test_multifile $input_type ogg "--verify"
1157*600f14f4SXin Li
1158*600f14f4SXin Li		echo "Testing multiple $input_type files with --ogg and --serial-number, with verify..."
1159*600f14f4SXin Li		test_multifile $input_type ogg "--serial-number=321 --verify"
1160*600f14f4SXin Li	fi
1161*600f14f4SXin Lidone
1162*600f14f4SXin Li
1163*600f14f4SXin Li
1164*600f14f4SXin Li############################################################################
1165*600f14f4SXin Li# test --keep-foreign-metadata
1166*600f14f4SXin Li############################################################################
1167*600f14f4SXin Li
1168*600f14f4SXin Liecho "Testing --keep-foreign-metadata..."
1169*600f14f4SXin Li
1170*600f14f4SXin Lirt_test_wav wacky1.wav '--keep-foreign-metadata'
1171*600f14f4SXin Lirt_test_wav wacky2.wav '--keep-foreign-metadata'
1172*600f14f4SXin Lirt_test_w64 wacky1.w64 '--keep-foreign-metadata'
1173*600f14f4SXin Lirt_test_w64 wacky2.w64 '--keep-foreign-metadata'
1174*600f14f4SXin Lirt_test_rf64 wacky1.rf64 '--keep-foreign-metadata'
1175*600f14f4SXin Lirt_test_rf64 wacky2.rf64 '--keep-foreign-metadata'
1176*600f14f4SXin Li
1177*600f14f4SXin Lirt_test_wav_autokf wacky1.wav '--keep-foreign-metadata'
1178*600f14f4SXin Lirt_test_wav_autokf wacky2.wav '--keep-foreign-metadata'
1179*600f14f4SXin Lirt_test_w64_autokf wacky1.w64 '--keep-foreign-metadata'
1180*600f14f4SXin Lirt_test_w64_autokf wacky2.w64 '--keep-foreign-metadata'
1181*600f14f4SXin Lirt_test_rf64_autokf wacky1.rf64 '--keep-foreign-metadata'
1182*600f14f4SXin Lirt_test_rf64_autokf wacky2.rf64 '--keep-foreign-metadata'
1183*600f14f4SXin Li
1184*600f14f4SXin Litestdatadir=${top_srcdir}/test/foreign-metadata-test-files
1185*600f14f4SXin Li
1186*600f14f4SXin Lirt_test_autokf "$testdatadir/BWF-WaveFmtEx.wav" '--keep-foreign-metadata' 'rt.wav'
1187*600f14f4SXin Lirt_test_autokf "$testdatadir/AIFF-ID3.aiff" '--keep-foreign-metadata' 'rt.aiff'
1188*600f14f4SXin Lirt_test_autokf "$testdatadir/AIFF-C-sowt-tag.aifc" '--keep-foreign-metadata' 'rt.aifc'
1189*600f14f4SXin Lirt_test_autokf "$testdatadir/AIFF-C-sowt-compression-type-name.aifc" '--keep-foreign-metadata' 'rt.aifc'
1190*600f14f4SXin Lirt_test_autokf "$testdatadir/24bit-WaveFmtPCM.wav" '--keep-foreign-metadata' 'rt.wav'
1191*600f14f4SXin Li
1192*600f14f4SXin Li############################################################################
1193*600f14f4SXin Li# test the metadata-handling properties of flac-to-flac encoding
1194*600f14f4SXin Li############################################################################
1195*600f14f4SXin Li
1196*600f14f4SXin Liecho "Testing the metadata-handling properties of flac-to-flac encoding..."
1197*600f14f4SXin Li
1198*600f14f4SXin Litestdatadir=${top_srcdir}/test/flac-to-flac-metadata-test-files
1199*600f14f4SXin Li
1200*600f14f4SXin Lifilter ()
1201*600f14f4SXin Li{
1202*600f14f4SXin Li	# minor danger, changing vendor strings might change the length of the
1203*600f14f4SXin Li	# VORBIS_COMMENT block, but if we add "^  length: " to the patterns,
1204*600f14f4SXin Li	# we lose info about PADDING size that we need
1205*600f14f4SXin Li	grep -Ev '^  vendor string: |^  m..imum .....size: ' | sed -e 's/, stream_offset.*//'
1206*600f14f4SXin Li}
1207*600f14f4SXin Liflac2flac ()
1208*600f14f4SXin Li{
1209*600f14f4SXin Li	file="$testdatadir/$1"
1210*600f14f4SXin Li	case="$testdatadir/$2"
1211*600f14f4SXin Li	args="$3"
1212*600f14f4SXin Li	expect="$case-expect.meta"
1213*600f14f4SXin Li	echo $ECHO_N "$2... " $ECHO_C
1214*600f14f4SXin Li	# The 'make distcheck' target needs this.
1215*600f14f4SXin Li	chmod u+w $file
1216*600f14f4SXin Li	run_flac -f -o out.flac $args $file || die "ERROR encoding FLAC file"
1217*600f14f4SXin Li	run_metaflac --list out.flac | filter > out1.meta || die "ERROR listing metadata of output FLAC file"
1218*600f14f4SXin Li    # Ignore lengths which can be affected by the version string.
1219*600f14f4SXin Li    sed "s/length:.*/length: XXX/" out1.meta > out.meta
1220*600f14f4SXin Li	diff -q -w $expect out.meta 2>/dev/null || die "ERROR: metadata does not match expected $expect"
1221*600f14f4SXin Li	echo OK
1222*600f14f4SXin Li}
1223*600f14f4SXin Li
1224*600f14f4SXin Li#filter=', stream_offset.*|^  vendor string: |^  length: |^  m..imum .....size: '
1225*600f14f4SXin Li
1226*600f14f4SXin Li# case 00a: no alterations on a file with all metadata types, keep all metadata, in same order
1227*600f14f4SXin Liflac2flac input-SCVAUP.flac case00a ""
1228*600f14f4SXin Li# case 01a: on file with multiple PADDING blocks, they should be aggregated into one at the end
1229*600f14f4SXin Liflac2flac input-SCVPAP.flac case01a ""
1230*600f14f4SXin Li# case 01b: on file with multiple PADDING blocks and --no-padding specified, they should all be deleted
1231*600f14f4SXin Liflac2flac input-SCVPAP.flac case01b "--no-padding"
1232*600f14f4SXin Li# case 01c: on file with multiple PADDING blocks and -P specified, they should all be overwritten with -P value
1233*600f14f4SXin Liflac2flac input-SCVPAP.flac case01c "-P 1234"
1234*600f14f4SXin Li# case 01d: on file with no PADDING blocks, use -P setting
1235*600f14f4SXin Liflac2flac input-SCVA.flac case01d "-P 1234"
1236*600f14f4SXin Li# case 01e: on file with no PADDING blocks and no -P given, use default padding
1237*600f14f4SXin Liflac2flac input-SCVA.flac case01e ""
1238*600f14f4SXin Li# case 02a: on file with no VORBIS_COMMENT block, add new VORBIS_COMMENT
1239*600f14f4SXin Liflac2flac input-SCPAP.flac case02a ""
1240*600f14f4SXin Li# case 02b: on file with no VORBIS_COMMENT block and --tag, add new VORBIS_COMMENT with tags
1241*600f14f4SXin Liflac2flac input-SCPAP.flac case02b "--tag=artist=0"
1242*600f14f4SXin Li# case 02c: on file with VORBIS_COMMENT block and --tag, replace existing VORBIS_COMMENT with new tags
1243*600f14f4SXin Liflac2flac input-SCVAUP.flac case02c "--tag=artist=0"
1244*600f14f4SXin Li# case 03a: on file with no CUESHEET block and --cuesheet specified, add it
1245*600f14f4SXin Liflac2flac input-SVAUP.flac case03a "--cuesheet=$testdatadir/input0.cue"
1246*600f14f4SXin Li# case 03b: on file with CUESHEET block and --cuesheet specified, overwrite existing CUESHEET
1247*600f14f4SXin Liflac2flac input-SCVAUP.flac case03b "--cuesheet=$testdatadir/input0.cue"
1248*600f14f4SXin Li# case 03c: on file with CUESHEET block and size-changing option specified, drop existing CUESHEET
1249*600f14f4SXin Liflac2flac input-SCVAUP.flac case03c "--skip=1"
1250*600f14f4SXin Li# case 04a: on file with no SEEKTABLE block and --no-seektable specified, no SEEKTABLE
1251*600f14f4SXin Liflac2flac input-VA.flac case04a "--no-padding --no-seektable"
1252*600f14f4SXin Li# case 04b: on file with no SEEKTABLE block and -S specified, new SEEKTABLE
1253*600f14f4SXin Liflac2flac input-VA.flac case04b "--no-padding -S 5x"
1254*600f14f4SXin Li# case 04c: on file with no SEEKTABLE block and no seektable options specified, new SEEKTABLE with default points
1255*600f14f4SXin Liflac2flac input-VA.flac case04c "--no-padding"
1256*600f14f4SXin Li# case 04d: on file with SEEKTABLE block and --no-seektable specified, drop existing SEEKTABLE
1257*600f14f4SXin Liflac2flac input-SCVA.flac case04d "--no-padding --no-seektable"
1258*600f14f4SXin Li# case 04e: on file with SEEKTABLE block and -S specified, overwrite existing SEEKTABLE
1259*600f14f4SXin Liflac2flac input-SCVA.flac case04e "--no-padding -S 5x"
1260*600f14f4SXin Li# case 04f: on file with SEEKTABLE block and size-changing option specified, drop existing SEEKTABLE, new SEEKTABLE with default points
1261*600f14f4SXin Li#(already covered by case03c)
1262*600f14f4SXin Li
1263*600f14f4SXin Li############################################################################
1264*600f14f4SXin Li# test limiting minimum bitrate
1265*600f14f4SXin Li############################################################################
1266*600f14f4SXin Li
1267*600f14f4SXin Liecho $ECHO_N "Testing --limit-min-bitrate" $ECHO_C
1268*600f14f4SXin Li
1269*600f14f4SXin Lirun_flac -f -o out.flac --no-padding --no-seektable --limit-min-bitrate "$testdatadir/input-VA.flac"
1270*600f14f4SXin Lisize=$(wc -c < out.flac)
1271*600f14f4SXin Li
1272*600f14f4SXin Liif [ "$size" -lt "1022" ]; then
1273*600f14f4SXin Li    die "ERROR: filesize of flac file encoded with --limit-min-bitrate is smaller than expected"
1274*600f14f4SXin Lifi
1275*600f14f4SXin Li
1276*600f14f4SXin Liecho OK
1277*600f14f4SXin Li
1278*600f14f4SXin Li############################################################################
1279*600f14f4SXin Li# test overflow of total samples field in STREAMINFO
1280*600f14f4SXin Li############################################################################
1281*600f14f4SXin Li
1282*600f14f4SXin Litest_total_samples_overflow ()
1283*600f14f4SXin Li{
1284*600f14f4SXin Li	total_samples=$1
1285*600f14f4SXin Li	expected_stored_total_samples=$2
1286*600f14f4SXin Li	echo $ECHO_N "total_samples overflow test (samples=$total_samples) encode... " $ECHO_C
1287*600f14f4SXin Li	head -c $total_samples /dev/zero | run_flac --force --verify --sign=signed --sample-rate=96000 -b 16384 --channels=1 --endian=little --bps=8 -o big-$total_samples.flac - || die "ERROR"
1288*600f14f4SXin Li	echo $ECHO_N "decode... " $ECHO_C
1289*600f14f4SXin Li	run_flac -t big-$total_samples.flac || die "ERROR"
1290*600f14f4SXin Li	echo $ECHO_N "check... " $ECHO_C
1291*600f14f4SXin Li	run_metaflac --show-total-samples big-$total_samples.flac > big-$total_samples.cmp1
1292*600f14f4SXin Li	echo $expected_stored_total_samples >  big-$total_samples.cmp2
1293*600f14f4SXin Li	diff -q -w big-$total_samples.cmp1 big-$total_samples.cmp2  || die "ERROR"
1294*600f14f4SXin Li	echo "OK"
1295*600f14f4SXin Li	rm -f big-$total_samples.flac big-$total_samples.cmp1 big-$total_samples.cmp2
1296*600f14f4SXin Li}
1297*600f14f4SXin Li
1298*600f14f4SXin Liif [ "$FLAC__TEST_LEVEL" -gt 1 ] ; then
1299*600f14f4SXin Li	test_total_samples_overflow 68719476735 68719476735
1300*600f14f4SXin Li	test_total_samples_overflow 68719476736 0
1301*600f14f4SXin Li	test_total_samples_overflow 68719476737 0
1302*600f14f4SXin Lifi
1303*600f14f4SXin Li
1304*600f14f4SXin Li############################################################################
1305*600f14f4SXin Li# test handling of UTF-8 filenames
1306*600f14f4SXin Li############################################################################
1307*600f14f4SXin Li
1308*600f14f4SXin Li
1309*600f14f4SXin Litest_utf8_handling ()
1310*600f14f4SXin Li{
1311*600f14f4SXin Li	echo $ECHO_N "Test decoding from $1... " $ECHO_C
1312*600f14f4SXin Li	run_flac -d $testdatadir/$1 -o out.wav
1313*600f14f4SXin Li	if [ -f out.wav ] ; then
1314*600f14f4SXin Li		echo "OK"
1315*600f14f4SXin Li	else
1316*600f14f4SXin Li		die "Decoding failed"
1317*600f14f4SXin Li	fi
1318*600f14f4SXin Li	echo $ECHO_N "Test encoding to $1... " $ECHO_C
1319*600f14f4SXin Li	run_flac out.wav -o $1
1320*600f14f4SXin Li	if [ -f $1 ] ; then
1321*600f14f4SXin Li		echo "OK"
1322*600f14f4SXin Li	else
1323*600f14f4SXin Li		die "Encoding failed"
1324*600f14f4SXin Li	fi
1325*600f14f4SXin Li	rm -f $1 out.wav
1326*600f14f4SXin Li}
1327*600f14f4SXin Li
1328*600f14f4SXin Liif [ "$WIN32BUSYBOX" != "yes" ]; then
1329*600f14f4SXin Li	test_utf8_handling שלום.flac
1330*600f14f4SXin Li	test_utf8_handling ��.flac
1331*600f14f4SXin Li	test_utf8_handling Prøve.flac
1332*600f14f4SXin Lifi
1333*600f14f4SXin Li
1334*600f14f4SXin Lirm -f out.flac out.meta out1.meta
1335*600f14f4SXin Li
1336*600f14f4SXin Li#@@@ when metaflac handles ogg flac, duplicate flac2flac tests here
1337*600f14f4SXin Li
1338*600f14f4SXin Licd ..
1339