blob: a2f9b278a86ff8cbe867a1cfd2774174e5bd1322 [file] [log] [blame]
Erik de Castro Lopo1a7c3fa2014-11-27 13:03:13 +11001#!/bin/sh -e
Josh Coalson463d0f82002-12-10 06:41:27 +00002
3# FLAC - Free Lossless Audio Codec
Erik de Castro Lopob1982fb2013-05-25 17:11:19 +10004# Copyright (C) 2001-2009 Josh Coalson
Erik de Castro Lopo14373912014-11-24 22:07:15 +11005# Copyright (C) 2011-2014 Xiph.Org Foundation
Josh Coalson463d0f82002-12-10 06:41:27 +00006#
Josh Coalsone8a76012003-02-07 00:14:32 +00007# This file is part the FLAC project. FLAC is comprised of several
Ulrich Klauercd4ddab2013-05-26 22:53:43 +02008# components distributed under different licenses. The codec libraries
Josh Coalsone8a76012003-02-07 00:14:32 +00009# are distributed under Xiph.Org's BSD-like license (see the file
10# COPYING.Xiph in this distribution). All other programs, libraries, and
11# plugins are distributed under the GPL (see COPYING.GPL). The documentation
12# is distributed under the Gnu FDL (see COPYING.FDL). Each file in the
13# FLAC distribution contains at the top the terms under which it may be
14# distributed.
Josh Coalson463d0f82002-12-10 06:41:27 +000015#
Josh Coalsone8a76012003-02-07 00:14:32 +000016# Since this particular file is relevant to all components of FLAC,
17# it may be distributed under the Xiph.Org license, which is the least
18# restrictive of those mentioned above. See the file COPYING.Xiph in this
19# distribution.
Josh Coalson463d0f82002-12-10 06:41:27 +000020
Erik de Castro Lopo1a7c3fa2014-11-27 13:03:13 +110021. ./common.sh
Erik de Castro Lopoa9712a22013-09-16 19:55:11 +100022
Josh Coalsond75a07c2009-01-03 01:50:46 +000023# we use '.' as decimal separator in --skip/--until tests
24export LANG=C LC_ALL=C
25
Josh Coalson1d42ba62006-11-08 16:25:55 +000026dddie="die ERROR: creating files with dd"
27
Josh Coalsonbfda3782006-08-28 03:42:10 +000028PATH=`pwd`/../src/flac:$PATH
29PATH=`pwd`/../src/metaflac:$PATH
30PATH=`pwd`/../src/test_streams:$PATH
Erik de Castro Lopo85d5c532013-01-02 22:37:42 +110031PATH=`pwd`/../objs/$BUILD/bin:$PATH
Josh Coalson463d0f82002-12-10 06:41:27 +000032
Erik de Castro Lopoa9712a22013-09-16 19:55:11 +100033flac${EXE} --help 1>/dev/null 2>/dev/null || die "ERROR can't find flac executable"
Josh Coalson463d0f82002-12-10 06:41:27 +000034
35run_flac ()
36{
Josh Coalsonde9091e2006-05-25 02:48:22 +000037 if [ x"$FLAC__TEST_WITH_VALGRIND" = xyes ] ; then
Martijn van Beurdenf6585b02013-04-21 23:12:16 +020038 echo "valgrind --leak-check=yes --show-reachable=yes --num-callers=50 flac $*" >>test_flac.valgrind.log
Erik de Castro Lopobb2abea2015-02-13 19:47:30 +110039 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
Josh Coalson463d0f82002-12-10 06:41:27 +000040 else
Erik de Castro Lopobb2abea2015-02-13 19:47:30 +110041 flac${EXE} $TOTALLY_SILENT --no-error-on-compression-fail $*
Josh Coalson463d0f82002-12-10 06:41:27 +000042 fi
43}
44
Josh Coalson68d13212004-09-14 00:25:43 +000045run_metaflac ()
46{
Josh Coalsonde9091e2006-05-25 02:48:22 +000047 if [ x"$FLAC__TEST_WITH_VALGRIND" = xyes ] ; then
Martijn van Beurdenf6585b02013-04-21 23:12:16 +020048 echo "valgrind --leak-check=yes --show-reachable=yes --num-callers=50 metaflac $*" >>test_flac.valgrind.log
Erik de Castro Lopoa9712a22013-09-16 19:55:11 +100049 valgrind --leak-check=yes --show-reachable=yes --num-callers=50 --log-fd=4 metaflac${EXE} $* 4>>test_flac.valgrind.log
Josh Coalson68d13212004-09-14 00:25:43 +000050 else
Erik de Castro Lopoa9712a22013-09-16 19:55:11 +100051 metaflac${EXE} $*
Josh Coalson68d13212004-09-14 00:25:43 +000052 fi
53}
54
Josh Coalsonbfda3782006-08-28 03:42:10 +000055md5cmp ()
56{
Erik de Castro Lopoa9712a22013-09-16 19:55:11 +100057 n=`( [ -f "$1" ] && [ -f "$2" ] && metaflac${EXE} --show-md5sum --no-filename "$1" "$2" 2>/dev/null || exit 1 ) | uniq | wc -l`
Josh Coalsonbfda3782006-08-28 03:42:10 +000058 [ "$n" != "" ] && [ $n = 1 ]
59}
60
Josh Coalsond4346722004-09-12 22:58:13 +000061if [ `env | grep -ic '^comspec='` != 0 ] ; then
62 is_win=yes
63else
64 is_win=no
65fi
66
Josh Coalson463d0f82002-12-10 06:41:27 +000067echo "Checking for --ogg support in flac..."
Erik de Castro Lopobb2abea2015-02-13 19:47:30 +110068if 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
Josh Coalson463d0f82002-12-10 06:41:27 +000069 has_ogg=yes;
70 echo "flac --ogg works"
71else
72 has_ogg=no;
73 echo "flac --ogg doesn't work"
74fi
75
Josh Coalson5126bb02002-12-17 08:15:48 +000076echo "Generating streams..."
77if [ ! -f wacky1.wav ] ; then
78 test_streams || die "ERROR during test_streams"
79fi
80
81############################################################################
Josh Coalson0bb57d02004-07-16 00:50:42 +000082# test that flac doesn't automatically overwrite files unless -f is used
83############################################################################
84
85echo "Try encoding to a file that exists; should fail"
86cp wacky1.wav exist.wav
87touch exist.flac
Erik de Castro Lopobb2abea2015-02-13 19:47:30 +110088if run_flac -0 exist.wav ; then
Josh Coalson0bb57d02004-07-16 00:50:42 +000089 die "ERROR: it should have failed but didn't"
90else
91 echo "OK, it failed as it should"
92fi
93
94echo "Try encoding with -f to a file that exists; should succeed"
Erik de Castro Lopobb2abea2015-02-13 19:47:30 +110095if run_flac -0 --force exist.wav ; then
Josh Coalson0bb57d02004-07-16 00:50:42 +000096 echo "OK, it succeeded as it should"
97else
98 die "ERROR: it should have succeeded but didn't"
99fi
100
101echo "Try decoding to a file that exists; should fail"
Erik de Castro Lopobb2abea2015-02-13 19:47:30 +1100102if run_flac -d exist.flac ; then
Josh Coalson0bb57d02004-07-16 00:50:42 +0000103 die "ERROR: it should have failed but didn't"
104else
105 echo "OK, it failed as it should"
106fi
107
108echo "Try decoding with -f to a file that exists; should succeed"
Erik de Castro Lopobb2abea2015-02-13 19:47:30 +1100109if run_flac -d -f exist.flac ; then
Josh Coalson0bb57d02004-07-16 00:50:42 +0000110 echo "OK, it succeeded as it should"
111else
112 die "ERROR: it should have succeeded but didn't"
113fi
114
115rm -f exist.wav exist.flac
116
117############################################################################
Josh Coalson1d42ba62006-11-08 16:25:55 +0000118# test fractional block sizes
119############################################################################
120
Josh Coalsonacc4bea2006-11-09 16:53:15 +0000121test_fractional ()
122{
123 blocksize=$1
124 samples=$2
Josh Coalson1d42ba62006-11-08 16:25:55 +0000125 dd if=noise.raw ibs=4 count=$samples of=pbs.raw 2>/dev/null || $dddie
Josh Coalsonacc4bea2006-11-09 16:53:15 +0000126 echo -n "fractional block size test (blocksize=$blocksize samples=$samples) encode... "
Erik de Castro Lopobb2abea2015-02-13 19:47:30 +1100127 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"
Josh Coalson1d42ba62006-11-08 16:25:55 +0000128 echo -n "decode... "
Erik de Castro Lopobb2abea2015-02-13 19:47:30 +1100129 run_flac --force --decode --force-raw-format --endian=little --sign=signed -o pbs.cmp pbs.flac || die "ERROR"
Josh Coalson1d42ba62006-11-08 16:25:55 +0000130 echo -n "compare... "
131 cmp pbs.raw pbs.cmp || die "ERROR: file mismatch"
132 echo "OK"
133 rm -f pbs.raw pbs.flac pbs.cmp
Josh Coalsonacc4bea2006-11-09 16:53:15 +0000134}
135
136# The special significance of 2048 is it's the # of samples that flac calls
137# FLAC__stream_encoder_process() on.
138#
139# We're trying to make sure the 1-sample overread logic in the stream encoder
140# (used for last-block checking) works; these values probe around common
141# multiples of the flac sample chunk size (2048) and the blocksize.
142for samples in 31 32 33 34 35 2046 2047 2048 2049 2050 ; do
143 test_fractional 33 $samples
144done
145for 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
146 test_fractional 256 $samples
147done
148for samples in 1022 1023 1024 1025 1026 2046 2047 2048 2049 2050 4094 4095 4096 4097 4098 ; do
149 test_fractional 2048 $samples
150done
151for 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
152 test_fractional 4608 $samples
Josh Coalson1d42ba62006-11-08 16:25:55 +0000153done
154
155############################################################################
Josh Coalson5126bb02002-12-17 08:15:48 +0000156# basic 'round-trip' tests of various kinds of streams
157############################################################################
158
159rt_test_raw ()
160{
161 f="$1"
Josh Coalson7617cac2008-09-09 07:24:23 +0000162 extra="$2"
Josh Coalson5126bb02002-12-17 08:15:48 +0000163 channels=`echo $f | awk -F- '{print $2}'`
Josh Coalson8def87a2006-10-07 01:20:38 +0000164 bps=`echo $f | awk -F- '{print $3}'`
Josh Coalson5126bb02002-12-17 08:15:48 +0000165 echo -n "round-trip test ($f) encode... "
Erik de Castro Lopobb2abea2015-02-13 19:47:30 +1100166 run_flac --force --verify --force-raw-format --endian=little --sign=signed --sample-rate=44100 --bps=$bps --channels=$channels --no-padding --lax -o rt.flac $extra $f || die "ERROR"
Josh Coalson5126bb02002-12-17 08:15:48 +0000167 echo -n "decode... "
Erik de Castro Lopobb2abea2015-02-13 19:47:30 +1100168 run_flac --force --decode --force-raw-format --endian=little --sign=signed -o rt.raw $extra rt.flac || die "ERROR"
Josh Coalson5126bb02002-12-17 08:15:48 +0000169 echo -n "compare... "
170 cmp $f rt.raw || die "ERROR: file mismatch"
171 echo "OK"
172 rm -f rt.flac rt.raw
173}
174
175rt_test_wav ()
176{
177 f="$1"
Josh Coalson7617cac2008-09-09 07:24:23 +0000178 extra="$2"
Josh Coalson5126bb02002-12-17 08:15:48 +0000179 echo -n "round-trip test ($f) encode... "
Erik de Castro Lopobb2abea2015-02-13 19:47:30 +1100180 run_flac --force --verify --channel-map=none --no-padding --lax -o rt.flac $extra $f || die "ERROR"
Josh Coalson5126bb02002-12-17 08:15:48 +0000181 echo -n "decode... "
Erik de Castro Lopobb2abea2015-02-13 19:47:30 +1100182 run_flac --force --decode --channel-map=none -o rt.wav $extra rt.flac || die "ERROR"
Josh Coalson5126bb02002-12-17 08:15:48 +0000183 echo -n "compare... "
184 cmp $f rt.wav || die "ERROR: file mismatch"
185 echo "OK"
186 rm -f rt.flac rt.wav
187}
188
Josh Coalsond7f53442008-09-09 07:49:19 +0000189rt_test_w64 ()
190{
191 f="$1"
192 extra="$2"
193 echo -n "round-trip test ($f) encode... "
Erik de Castro Lopobb2abea2015-02-13 19:47:30 +1100194 run_flac --force --verify --channel-map=none --no-padding --lax -o rt.flac $extra $f || die "ERROR"
Josh Coalsond7f53442008-09-09 07:49:19 +0000195 echo -n "decode... "
Erik de Castro Lopobb2abea2015-02-13 19:47:30 +1100196 run_flac --force --decode --channel-map=none -o rt.w64 $extra rt.flac || die "ERROR"
Josh Coalsond7f53442008-09-09 07:49:19 +0000197 echo -n "compare... "
198 cmp $f rt.w64 || die "ERROR: file mismatch"
199 echo "OK"
200 rm -f rt.flac rt.w64
201}
202
Josh Coalson7617cac2008-09-09 07:24:23 +0000203rt_test_rf64 ()
204{
205 f="$1"
206 extra="$2"
207 echo -n "round-trip test ($f) encode... "
Erik de Castro Lopobb2abea2015-02-13 19:47:30 +1100208 run_flac --force --verify --channel-map=none --no-padding --lax -o rt.flac $extra $f || die "ERROR"
Josh Coalson7617cac2008-09-09 07:24:23 +0000209 echo -n "decode... "
Erik de Castro Lopobb2abea2015-02-13 19:47:30 +1100210 run_flac --force --decode --channel-map=none -o rt.rf64 $extra rt.flac || die "ERROR"
Josh Coalson7617cac2008-09-09 07:24:23 +0000211 echo -n "compare... "
212 cmp $f rt.rf64 || die "ERROR: file mismatch"
213 echo "OK"
214 rm -f rt.flac rt.rf64
215}
216
Josh Coalson5126bb02002-12-17 08:15:48 +0000217rt_test_aiff ()
218{
219 f="$1"
Josh Coalson7617cac2008-09-09 07:24:23 +0000220 extra="$2"
Josh Coalson5126bb02002-12-17 08:15:48 +0000221 echo -n "round-trip test ($f) encode... "
Erik de Castro Lopobb2abea2015-02-13 19:47:30 +1100222 run_flac --force --verify --channel-map=none --no-padding --lax -o rt.flac $extra $f || die "ERROR"
Josh Coalson5126bb02002-12-17 08:15:48 +0000223 echo -n "decode... "
Erik de Castro Lopobb2abea2015-02-13 19:47:30 +1100224 run_flac --force --decode --channel-map=none -o rt.aiff $extra rt.flac || die "ERROR"
Josh Coalson5126bb02002-12-17 08:15:48 +0000225 echo -n "compare... "
226 cmp $f rt.aiff || die "ERROR: file mismatch"
227 echo "OK"
228 rm -f rt.flac rt.aiff
229}
230
Josh Coalsonbfda3782006-08-28 03:42:10 +0000231# assumes input file is WAVE; does not check the metadata-preserving features of flac-to-flac; that is checked later
232rt_test_flac ()
233{
234 f="$1"
Josh Coalson7617cac2008-09-09 07:24:23 +0000235 extra="$2"
Josh Coalsonbfda3782006-08-28 03:42:10 +0000236 echo -n "round-trip test ($f->flac->flac->wav) encode... "
Erik de Castro Lopobb2abea2015-02-13 19:47:30 +1100237 run_flac --force --verify --channel-map=none --no-padding --lax -o rt.flac $extra $f || die "ERROR"
Josh Coalsonbfda3782006-08-28 03:42:10 +0000238 echo -n "re-encode... "
Erik de Castro Lopobb2abea2015-02-13 19:47:30 +1100239 run_flac --force --verify --lax -o rt2.flac rt.flac || die "ERROR"
Josh Coalsonbfda3782006-08-28 03:42:10 +0000240 echo -n "decode... "
Erik de Castro Lopobb2abea2015-02-13 19:47:30 +1100241 run_flac --force --decode --channel-map=none -o rt.wav $extra rt2.flac || die "ERROR"
Josh Coalsonbfda3782006-08-28 03:42:10 +0000242 echo -n "compare... "
243 cmp $f rt.wav || die "ERROR: file mismatch"
244 echo "OK"
245 rm -f rt.wav rt.flac rt2.flac
246}
247
Josh Coalsonc28efe22006-11-04 03:04:21 +0000248# assumes input file is WAVE; does not check the metadata-preserving features of flac-to-flac; that is checked later
249rt_test_ogg_flac ()
250{
251 f="$1"
Josh Coalson7617cac2008-09-09 07:24:23 +0000252 extra="$2"
Josh Coalsonc28efe22006-11-04 03:04:21 +0000253 echo -n "round-trip test ($f->oggflac->oggflac->wav) encode... "
Erik de Castro Lopobb2abea2015-02-13 19:47:30 +1100254 run_flac --force --verify --channel-map=none --no-padding --lax -o rt.oga --ogg $extra $f || die "ERROR"
Josh Coalsonc28efe22006-11-04 03:04:21 +0000255 echo -n "re-encode... "
Erik de Castro Lopobb2abea2015-02-13 19:47:30 +1100256 run_flac --force --verify --lax -o rt2.oga --ogg rt.oga || die "ERROR"
Josh Coalsonc28efe22006-11-04 03:04:21 +0000257 echo -n "decode... "
Erik de Castro Lopobb2abea2015-02-13 19:47:30 +1100258 run_flac --force --decode --channel-map=none -o rt.wav $extra rt2.oga || die "ERROR"
Josh Coalsonc28efe22006-11-04 03:04:21 +0000259 echo -n "compare... "
260 cmp $f rt.wav || die "ERROR: file mismatch"
261 echo "OK"
Josh Coalson12d3a412007-08-01 03:02:00 +0000262 rm -f rt.wav rt.oga rt2.oga
Josh Coalsonc28efe22006-11-04 03:04:21 +0000263}
264
Josh Coalson5126bb02002-12-17 08:15:48 +0000265for f in rt-*.raw ; do
266 rt_test_raw $f
267done
268for f in rt-*.wav ; do
269 rt_test_wav $f
270done
Josh Coalsond7f53442008-09-09 07:49:19 +0000271for f in rt-*.w64 ; do
272 rt_test_w64 $f
273done
Josh Coalson7617cac2008-09-09 07:24:23 +0000274for f in rt-*.rf64 ; do
275 rt_test_rf64 $f
276done
Josh Coalson5126bb02002-12-17 08:15:48 +0000277for f in rt-*.aiff ; do
278 rt_test_aiff $f
279done
Josh Coalsonbfda3782006-08-28 03:42:10 +0000280for f in rt-*.wav ; do
281 rt_test_flac $f
282done
Josh Coalsonc28efe22006-11-04 03:04:21 +0000283if [ $has_ogg = yes ] ; then
284 for f in rt-*.wav ; do
285 rt_test_ogg_flac $f
286 done
287fi
Josh Coalson5126bb02002-12-17 08:15:48 +0000288
Josh Coalson8fac5d62002-12-12 03:57:47 +0000289############################################################################
290# test --skip and --until
291############################################################################
292
Josh Coalson463d0f82002-12-10 06:41:27 +0000293#
Josh Coalson8232e292002-12-14 06:22:22 +0000294# first make some chopped-up raw files
Josh Coalson463d0f82002-12-10 06:41:27 +0000295#
Josh Coalson8fac5d62002-12-12 03:57:47 +0000296echo "abcdefghijklmnopqrstuvwxyz1234567890ABCDEFGHIJKLMN" > master.raw
Josh Coalson8fac5d62002-12-12 03:57:47 +0000297dd if=master.raw ibs=1 count=50 of=50c.raw 2>/dev/null || $dddie
298dd if=master.raw ibs=1 skip=10 count=40 of=50c.skip10.raw 2>/dev/null || $dddie
299dd if=master.raw ibs=1 skip=11 count=39 of=50c.skip11.raw 2>/dev/null || $dddie
Josh Coalson03a5a692004-07-17 00:23:17 +0000300dd if=master.raw ibs=1 skip=20 count=30 of=50c.skip20.raw 2>/dev/null || $dddie
301dd if=master.raw ibs=1 skip=30 count=20 of=50c.skip30.raw 2>/dev/null || $dddie
302dd if=master.raw ibs=1 skip=40 count=10 of=50c.skip40.raw 2>/dev/null || $dddie
303dd if=master.raw ibs=1 count=10 of=50c.until10.raw 2>/dev/null || $dddie
304dd if=master.raw ibs=1 count=20 of=50c.until20.raw 2>/dev/null || $dddie
305dd if=master.raw ibs=1 count=30 of=50c.until30.raw 2>/dev/null || $dddie
Josh Coalson8fac5d62002-12-12 03:57:47 +0000306dd if=master.raw ibs=1 count=39 of=50c.until39.raw 2>/dev/null || $dddie
Josh Coalson03a5a692004-07-17 00:23:17 +0000307dd if=master.raw ibs=1 count=40 of=50c.until40.raw 2>/dev/null || $dddie
308dd if=master.raw ibs=1 skip=10 count=20 of=50c.skip10.until30.raw 2>/dev/null || $dddie
Josh Coalson8fac5d62002-12-12 03:57:47 +0000309dd if=master.raw ibs=1 skip=10 count=29 of=50c.skip10.until39.raw 2>/dev/null || $dddie
Josh Coalson03a5a692004-07-17 00:23:17 +0000310dd if=master.raw ibs=1 skip=10 count=30 of=50c.skip10.until40.raw 2>/dev/null || $dddie
311dd if=master.raw ibs=1 skip=20 count=10 of=50c.skip20.until30.raw 2>/dev/null || $dddie
312dd if=master.raw ibs=1 skip=20 count=20 of=50c.skip20.until40.raw 2>/dev/null || $dddie
Josh Coalson463d0f82002-12-10 06:41:27 +0000313
Erik de Castro Lopobb2abea2015-02-13 19:47:30 +1100314wav_eopt="--force --verify --no-padding --lax"
315wav_dopt="--force --decode"
Josh Coalson8232e292002-12-14 06:22:22 +0000316
Josh Coalson2b295462006-11-17 07:26:39 +0000317raw_eopt="$wav_eopt --force-raw-format --endian=big --sign=signed --sample-rate=10 --bps=8 --channels=1"
Josh Coalson8232e292002-12-14 06:22:22 +0000318raw_dopt="$wav_dopt --force-raw-format --endian=big --sign=signed"
Josh Coalson8fac5d62002-12-12 03:57:47 +0000319
320#
Josh Coalsonc28efe22006-11-04 03:04:21 +0000321# convert them to WAVE/AIFF/Ogg FLAC files
Josh Coalson8fac5d62002-12-12 03:57:47 +0000322#
Josh Coalson8232e292002-12-14 06:22:22 +0000323convert_to_wav ()
324{
Josh Coalsonc2751e62005-08-27 01:57:39 +0000325 run_flac "$2" $1.raw || die "ERROR converting $1.raw to WAVE"
326 run_flac "$3" $1.flac || die "ERROR converting $1.raw to WAVE"
Josh Coalson8232e292002-12-14 06:22:22 +0000327}
Josh Coalsonc2751e62005-08-27 01:57:39 +0000328convert_to_wav 50c "$raw_eopt" "$wav_dopt"
329convert_to_wav 50c.skip10 "$raw_eopt" "$wav_dopt"
330convert_to_wav 50c.skip11 "$raw_eopt" "$wav_dopt"
331convert_to_wav 50c.skip20 "$raw_eopt" "$wav_dopt"
332convert_to_wav 50c.skip30 "$raw_eopt" "$wav_dopt"
333convert_to_wav 50c.skip40 "$raw_eopt" "$wav_dopt"
334convert_to_wav 50c.until10 "$raw_eopt" "$wav_dopt"
335convert_to_wav 50c.until20 "$raw_eopt" "$wav_dopt"
336convert_to_wav 50c.until30 "$raw_eopt" "$wav_dopt"
337convert_to_wav 50c.until39 "$raw_eopt" "$wav_dopt"
338convert_to_wav 50c.until40 "$raw_eopt" "$wav_dopt"
339convert_to_wav 50c.skip10.until30 "$raw_eopt" "$wav_dopt"
340convert_to_wav 50c.skip10.until39 "$raw_eopt" "$wav_dopt"
341convert_to_wav 50c.skip10.until40 "$raw_eopt" "$wav_dopt"
342convert_to_wav 50c.skip20.until30 "$raw_eopt" "$wav_dopt"
343convert_to_wav 50c.skip20.until40 "$raw_eopt" "$wav_dopt"
Josh Coalson8fac5d62002-12-12 03:57:47 +0000344
Josh Coalson5126bb02002-12-17 08:15:48 +0000345convert_to_aiff ()
346{
Josh Coalsonc2751e62005-08-27 01:57:39 +0000347 run_flac "$2" $1.raw || die "ERROR converting $1.raw to AIFF"
348 run_flac "$3" $1.flac -o $1.aiff || die "ERROR converting $1.raw to AIFF"
Josh Coalson5126bb02002-12-17 08:15:48 +0000349}
Josh Coalsonc2751e62005-08-27 01:57:39 +0000350convert_to_aiff 50c "$raw_eopt" "$wav_dopt"
351convert_to_aiff 50c.skip10 "$raw_eopt" "$wav_dopt"
352convert_to_aiff 50c.skip11 "$raw_eopt" "$wav_dopt"
353convert_to_aiff 50c.skip20 "$raw_eopt" "$wav_dopt"
354convert_to_aiff 50c.skip30 "$raw_eopt" "$wav_dopt"
355convert_to_aiff 50c.skip40 "$raw_eopt" "$wav_dopt"
356convert_to_aiff 50c.until10 "$raw_eopt" "$wav_dopt"
357convert_to_aiff 50c.until20 "$raw_eopt" "$wav_dopt"
358convert_to_aiff 50c.until30 "$raw_eopt" "$wav_dopt"
359convert_to_aiff 50c.until39 "$raw_eopt" "$wav_dopt"
360convert_to_aiff 50c.until40 "$raw_eopt" "$wav_dopt"
361convert_to_aiff 50c.skip10.until30 "$raw_eopt" "$wav_dopt"
362convert_to_aiff 50c.skip10.until39 "$raw_eopt" "$wav_dopt"
363convert_to_aiff 50c.skip10.until40 "$raw_eopt" "$wav_dopt"
364convert_to_aiff 50c.skip20.until30 "$raw_eopt" "$wav_dopt"
365convert_to_aiff 50c.skip20.until40 "$raw_eopt" "$wav_dopt"
Josh Coalson5126bb02002-12-17 08:15:48 +0000366
Josh Coalsonc28efe22006-11-04 03:04:21 +0000367convert_to_ogg ()
368{
369 run_flac "$wav_eopt" --ogg $1.wav || die "ERROR converting $1.raw to Ogg FLAC"
370}
371if [ $has_ogg = yes ] ; then
372 convert_to_ogg 50c
373 convert_to_ogg 50c.skip10
374 convert_to_ogg 50c.skip11
375 convert_to_ogg 50c.skip20
376 convert_to_ogg 50c.skip30
377 convert_to_ogg 50c.skip40
378 convert_to_ogg 50c.until10
379 convert_to_ogg 50c.until20
380 convert_to_ogg 50c.until30
381 convert_to_ogg 50c.until39
382 convert_to_ogg 50c.until40
383 convert_to_ogg 50c.skip10.until30
384 convert_to_ogg 50c.skip10.until39
385 convert_to_ogg 50c.skip10.until40
386 convert_to_ogg 50c.skip20.until30
387 convert_to_ogg 50c.skip20.until40
388fi
389
Josh Coalson8232e292002-12-14 06:22:22 +0000390test_skip_until ()
391{
Josh Coalson3e3ad0c2004-07-07 07:39:59 +0000392 in_fmt=$1
393 out_fmt=$2
Josh Coalson463d0f82002-12-10 06:41:27 +0000394
Josh Coalsonc28efe22006-11-04 03:04:21 +0000395 [ "$in_fmt" = wav ] || [ "$in_fmt" = aiff ] || [ "$in_fmt" = raw ] || [ "$in_fmt" = flac ] || [ "$in_fmt" = ogg ] || die "ERROR: internal error, bad 'in' format '$in_fmt'"
Josh Coalson463d0f82002-12-10 06:41:27 +0000396
Josh Coalson3e3ad0c2004-07-07 07:39:59 +0000397 [ "$out_fmt" = flac ] || [ "$out_fmt" = ogg ] || die "ERROR: internal error, bad 'out' format '$out_fmt'"
398
399 if [ $in_fmt = raw ] ; then
Josh Coalson8232e292002-12-14 06:22:22 +0000400 eopt="$raw_eopt"
401 dopt="$raw_dopt"
402 else
403 eopt="$wav_eopt"
404 dopt="$wav_dopt"
405 fi
Josh Coalson463d0f82002-12-10 06:41:27 +0000406
Josh Coalsonc28efe22006-11-04 03:04:21 +0000407 if ( [ $in_fmt = flac ] || [ $in_fmt = ogg ] ) && ( [ $out_fmt = flac ] || [ $out_fmt = ogg ] ) ; then
Josh Coalsonbfda3782006-08-28 03:42:10 +0000408 CMP=md5cmp
409 else
410 CMP=cmp
411 fi
412
Josh Coalson3e3ad0c2004-07-07 07:39:59 +0000413 if [ $out_fmt = ogg ] ; then
414 eopt="--ogg $eopt"
415 fi
416
Josh Coalson8232e292002-12-14 06:22:22 +0000417 #
418 # test --skip when encoding
419 #
Josh Coalson8fac5d62002-12-12 03:57:47 +0000420
Josh Coalson3e3ad0c2004-07-07 07:39:59 +0000421 desc="($in_fmt<->$out_fmt)"
422
423 echo -n "testing --skip=# (encode) $desc... "
424 run_flac $eopt --skip=10 -o z50c.skip10.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
Josh Coalsonbfda3782006-08-28 03:42:10 +0000425 [ $in_fmt = $out_fmt ] || run_flac $dopt -o z50c.skip10.$in_fmt z50c.skip10.$out_fmt || die "ERROR decoding FLAC file $desc"
426 $CMP 50c.skip10.$in_fmt z50c.skip10.$in_fmt || die "ERROR: file mismatch for --skip=10 (encode) $desc"
Josh Coalson3e3ad0c2004-07-07 07:39:59 +0000427 rm -f z50c.skip10.$out_fmt z50c.skip10.$in_fmt
Josh Coalson8232e292002-12-14 06:22:22 +0000428 echo OK
Josh Coalson463d0f82002-12-10 06:41:27 +0000429
Josh Coalson3e3ad0c2004-07-07 07:39:59 +0000430 echo -n "testing --skip=mm:ss (encode) $desc... "
Josh Coalson3b938ac2008-06-03 06:33:44 +0000431 run_flac $eopt --skip=0:01 -o z50c.skip0_01.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
Erik de Castro Lopobb2abea2015-02-13 19:47:30 +1100432
Josh Coalson3b938ac2008-06-03 06:33:44 +0000433 [ $in_fmt = $out_fmt ] || run_flac $dopt -o z50c.skip0_01.$in_fmt z50c.skip0_01.$out_fmt || die "ERROR decoding FLAC file $desc"
434 $CMP 50c.skip10.$in_fmt z50c.skip0_01.$in_fmt || die "ERROR: file mismatch for --skip=0:01 (encode) $desc"
435 rm -f z50c.skip0_01.$out_fmt z50c.skip0_01.$in_fmt
Josh Coalson8232e292002-12-14 06:22:22 +0000436 echo OK
Josh Coalson463d0f82002-12-10 06:41:27 +0000437
Josh Coalson3e3ad0c2004-07-07 07:39:59 +0000438 echo -n "testing --skip=mm:ss.sss (encode) $desc... "
Josh Coalson3b938ac2008-06-03 06:33:44 +0000439 run_flac $eopt --skip=0:01.1001 -o z50c.skip0_01.1001.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
440 [ $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"
441 $CMP 50c.skip11.$in_fmt z50c.skip0_01.1001.$in_fmt || die "ERROR: file mismatch for --skip=0:01.1001 (encode) $desc"
442 rm -f z50c.skip0_01.1001.$out_fmt z50c.skip0_01.1001.$in_fmt
Josh Coalson8232e292002-12-14 06:22:22 +0000443 echo OK
Josh Coalson463d0f82002-12-10 06:41:27 +0000444
Josh Coalson8232e292002-12-14 06:22:22 +0000445 #
446 # test --skip when decoding
447 #
Josh Coalson463d0f82002-12-10 06:41:27 +0000448
Josh Coalsonbfda3782006-08-28 03:42:10 +0000449 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"
450
Josh Coalson3e3ad0c2004-07-07 07:39:59 +0000451 echo -n "testing --skip=# (decode) $desc... "
Josh Coalson3e3ad0c2004-07-07 07:39:59 +0000452 run_flac $dopt --skip=10 -o z50c.skip10.$in_fmt z50c.$out_fmt || die "ERROR decoding FLAC file $desc"
Josh Coalsonbfda3782006-08-28 03:42:10 +0000453 $CMP 50c.skip10.$in_fmt z50c.skip10.$in_fmt || die "ERROR: file mismatch for --skip=10 (decode) $desc"
Josh Coalson3e3ad0c2004-07-07 07:39:59 +0000454 rm -f z50c.skip10.$in_fmt
Josh Coalson8232e292002-12-14 06:22:22 +0000455 echo OK
Josh Coalson8fac5d62002-12-12 03:57:47 +0000456
Josh Coalson3e3ad0c2004-07-07 07:39:59 +0000457 echo -n "testing --skip=mm:ss (decode) $desc... "
Josh Coalson3b938ac2008-06-03 06:33:44 +0000458 run_flac $dopt --skip=0:01 -o z50c.skip0_01.$in_fmt z50c.$out_fmt || die "ERROR decoding FLAC file $desc"
459 $CMP 50c.skip10.$in_fmt z50c.skip0_01.$in_fmt || die "ERROR: file mismatch for --skip=0:01 (decode) $desc"
460 rm -f z50c.skip0_01.$in_fmt
Josh Coalson8232e292002-12-14 06:22:22 +0000461 echo OK
Josh Coalson8fac5d62002-12-12 03:57:47 +0000462
Josh Coalson3e3ad0c2004-07-07 07:39:59 +0000463 echo -n "testing --skip=mm:ss.sss (decode) $desc... "
Josh Coalson3b938ac2008-06-03 06:33:44 +0000464 run_flac $dopt --skip=0:01.1001 -o z50c.skip0_01.1001.$in_fmt z50c.$out_fmt || die "ERROR decoding FLAC file $desc"
465 $CMP 50c.skip11.$in_fmt z50c.skip0_01.1001.$in_fmt || die "ERROR: file mismatch for --skip=0:01.1001 (decode) $desc"
466 rm -f z50c.skip0_01.1001.$in_fmt
Josh Coalson8232e292002-12-14 06:22:22 +0000467 echo OK
Josh Coalson8fac5d62002-12-12 03:57:47 +0000468
Josh Coalson3e3ad0c2004-07-07 07:39:59 +0000469 rm -f z50c.$out_fmt
Josh Coalson8fac5d62002-12-12 03:57:47 +0000470
Josh Coalson8232e292002-12-14 06:22:22 +0000471 #
472 # test --until when encoding
473 #
Josh Coalson8fac5d62002-12-12 03:57:47 +0000474
Josh Coalson3e3ad0c2004-07-07 07:39:59 +0000475 echo -n "testing --until=# (encode) $desc... "
476 run_flac $eopt --until=40 -o z50c.until40.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
Josh Coalsonbfda3782006-08-28 03:42:10 +0000477 [ $in_fmt = $out_fmt ] || run_flac $dopt -o z50c.until40.$in_fmt z50c.until40.$out_fmt || die "ERROR decoding FLAC file $desc"
478 $CMP 50c.until40.$in_fmt z50c.until40.$in_fmt || die "ERROR: file mismatch for --until=40 (encode) $desc"
Josh Coalson3e3ad0c2004-07-07 07:39:59 +0000479 rm -f z50c.until40.$out_fmt z50c.until40.$in_fmt
Josh Coalson8232e292002-12-14 06:22:22 +0000480 echo OK
Josh Coalson8fac5d62002-12-12 03:57:47 +0000481
Josh Coalson3e3ad0c2004-07-07 07:39:59 +0000482 echo -n "testing --until=mm:ss (encode) $desc... "
Josh Coalson3b938ac2008-06-03 06:33:44 +0000483 run_flac $eopt --until=0:04 -o z50c.until0_04.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
484 [ $in_fmt = $out_fmt ] || run_flac $dopt -o z50c.until0_04.$in_fmt z50c.until0_04.$out_fmt || die "ERROR decoding FLAC file $desc"
485 $CMP 50c.until40.$in_fmt z50c.until0_04.$in_fmt || die "ERROR: file mismatch for --until=0:04 (encode) $desc"
486 rm -f z50c.until0_04.$out_fmt z50c.until0_04.$in_fmt
Josh Coalson8232e292002-12-14 06:22:22 +0000487 echo OK
Josh Coalson8fac5d62002-12-12 03:57:47 +0000488
Josh Coalson3e3ad0c2004-07-07 07:39:59 +0000489 echo -n "testing --until=mm:ss.sss (encode) $desc... "
Josh Coalson3b938ac2008-06-03 06:33:44 +0000490 run_flac $eopt --until=0:03.9001 -o z50c.until0_03.9001.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
491 [ $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"
492 $CMP 50c.until39.$in_fmt z50c.until0_03.9001.$in_fmt || die "ERROR: file mismatch for --until=0:03.9001 (encode) $desc"
493 rm -f z50c.until0_03.9001.$out_fmt z50c.until0_03.9001.$in_fmt
Josh Coalson8232e292002-12-14 06:22:22 +0000494 echo OK
Josh Coalson8fac5d62002-12-12 03:57:47 +0000495
Josh Coalson3e3ad0c2004-07-07 07:39:59 +0000496 echo -n "testing --until=-# (encode) $desc... "
497 run_flac $eopt --until=-10 -o z50c.until-10.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
Josh Coalsonbfda3782006-08-28 03:42:10 +0000498 [ $in_fmt = $out_fmt ] || run_flac $dopt -o z50c.until-10.$in_fmt z50c.until-10.$out_fmt || die "ERROR decoding FLAC file $desc"
499 $CMP 50c.until40.$in_fmt z50c.until-10.$in_fmt || die "ERROR: file mismatch for --until=-10 (encode) $desc"
Josh Coalson3e3ad0c2004-07-07 07:39:59 +0000500 rm -f z50c.until-10.$out_fmt z50c.until-10.$in_fmt
Josh Coalson8232e292002-12-14 06:22:22 +0000501 echo OK
Josh Coalson8fac5d62002-12-12 03:57:47 +0000502
Josh Coalson3e3ad0c2004-07-07 07:39:59 +0000503 echo -n "testing --until=-mm:ss (encode) $desc... "
Josh Coalson3b938ac2008-06-03 06:33:44 +0000504 run_flac $eopt --until=-0:01 -o z50c.until-0_01.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
505 [ $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"
506 $CMP 50c.until40.$in_fmt z50c.until-0_01.$in_fmt || die "ERROR: file mismatch for --until=-0:01 (encode) $desc"
507 rm -f z50c.until-0_01.$out_fmt z50c.until-0_01.$in_fmt
Josh Coalson8232e292002-12-14 06:22:22 +0000508 echo OK
Josh Coalson8fac5d62002-12-12 03:57:47 +0000509
Josh Coalson3e3ad0c2004-07-07 07:39:59 +0000510 echo -n "testing --until=-mm:ss.sss (encode) $desc... "
Josh Coalson3b938ac2008-06-03 06:33:44 +0000511 run_flac $eopt --until=-0:01.1001 -o z50c.until-0_01.1001.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
512 [ $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"
513 $CMP 50c.until39.$in_fmt z50c.until-0_01.1001.$in_fmt || die "ERROR: file mismatch for --until=-0:01.1001 (encode) $desc"
514 rm -f z50c.until-0_01.1001.$out_fmt z50c.until-0_01.1001.$in_fmt
Josh Coalson8232e292002-12-14 06:22:22 +0000515 echo OK
Josh Coalson8fac5d62002-12-12 03:57:47 +0000516
Josh Coalson8232e292002-12-14 06:22:22 +0000517 #
518 # test --until when decoding
519 #
Josh Coalson8fac5d62002-12-12 03:57:47 +0000520
Josh Coalsonbfda3782006-08-28 03:42:10 +0000521 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"
Josh Coalson8fac5d62002-12-12 03:57:47 +0000522
Josh Coalson3e3ad0c2004-07-07 07:39:59 +0000523 echo -n "testing --until=# (decode) $desc... "
524 run_flac $dopt --until=40 -o z50c.until40.$in_fmt z50c.$out_fmt || die "ERROR decoding FLAC file $desc"
Josh Coalsonbfda3782006-08-28 03:42:10 +0000525 $CMP 50c.until40.$in_fmt z50c.until40.$in_fmt || die "ERROR: file mismatch for --until=40 (decode) $desc"
Josh Coalson3e3ad0c2004-07-07 07:39:59 +0000526 rm -f z50c.until40.$in_fmt
Josh Coalson8232e292002-12-14 06:22:22 +0000527 echo OK
Josh Coalson8fac5d62002-12-12 03:57:47 +0000528
Josh Coalson3e3ad0c2004-07-07 07:39:59 +0000529 echo -n "testing --until=mm:ss (decode) $desc... "
Josh Coalson3b938ac2008-06-03 06:33:44 +0000530 run_flac $dopt --until=0:04 -o z50c.until0_04.$in_fmt z50c.$out_fmt || die "ERROR decoding FLAC file $desc"
531 $CMP 50c.until40.$in_fmt z50c.until0_04.$in_fmt || die "ERROR: file mismatch for --until=0:04 (decode) $desc"
532 rm -f z50c.until0_04.$in_fmt
Josh Coalson8232e292002-12-14 06:22:22 +0000533 echo OK
Josh Coalson8fac5d62002-12-12 03:57:47 +0000534
Josh Coalson3e3ad0c2004-07-07 07:39:59 +0000535 echo -n "testing --until=mm:ss.sss (decode) $desc... "
Josh Coalson3b938ac2008-06-03 06:33:44 +0000536 run_flac $dopt --until=0:03.9001 -o z50c.until0_03.9001.$in_fmt z50c.$out_fmt || die "ERROR decoding FLAC file $desc"
537 $CMP 50c.until39.$in_fmt z50c.until0_03.9001.$in_fmt || die "ERROR: file mismatch for --until=0:03.9001 (decode) $desc"
538 rm -f z50c.until0_03.9001.$in_fmt
Josh Coalson8232e292002-12-14 06:22:22 +0000539 echo OK
Josh Coalson8fac5d62002-12-12 03:57:47 +0000540
Josh Coalson3e3ad0c2004-07-07 07:39:59 +0000541 echo -n "testing --until=-# (decode) $desc... "
542 run_flac $dopt --until=-10 -o z50c.until-10.$in_fmt z50c.$out_fmt || die "ERROR decoding FLAC file $desc"
Josh Coalsonbfda3782006-08-28 03:42:10 +0000543 $CMP 50c.until40.$in_fmt z50c.until-10.$in_fmt || die "ERROR: file mismatch for --until=-10 (decode) $desc"
Josh Coalson3e3ad0c2004-07-07 07:39:59 +0000544 rm -f z50c.until-10.$in_fmt
Josh Coalson8232e292002-12-14 06:22:22 +0000545 echo OK
Josh Coalson8fac5d62002-12-12 03:57:47 +0000546
Josh Coalson3e3ad0c2004-07-07 07:39:59 +0000547 echo -n "testing --until=-mm:ss (decode) $desc... "
Josh Coalson3b938ac2008-06-03 06:33:44 +0000548 run_flac $dopt --until=-0:01 -o z50c.until-0_01.$in_fmt z50c.$out_fmt || die "ERROR decoding FLAC file $desc"
549 $CMP 50c.until40.$in_fmt z50c.until-0_01.$in_fmt || die "ERROR: file mismatch for --until=-0:01 (decode) $desc"
550 rm -f z50c.until-0_01.$in_fmt
Josh Coalson8232e292002-12-14 06:22:22 +0000551 echo OK
Josh Coalson8fac5d62002-12-12 03:57:47 +0000552
Josh Coalson3e3ad0c2004-07-07 07:39:59 +0000553 echo -n "testing --until=-mm:ss.sss (decode) $desc... "
Josh Coalson3b938ac2008-06-03 06:33:44 +0000554 run_flac $dopt --until=-0:01.1001 -o z50c.until-0_01.1001.$in_fmt z50c.$out_fmt || die "ERROR decoding FLAC file $desc"
555 $CMP 50c.until39.$in_fmt z50c.until-0_01.1001.$in_fmt || die "ERROR: file mismatch for --until=-0:01.1001 (decode) $desc"
556 rm -f z50c.until-0_01.1001.$in_fmt
Josh Coalson8232e292002-12-14 06:22:22 +0000557 echo OK
Josh Coalson8fac5d62002-12-12 03:57:47 +0000558
Josh Coalson3e3ad0c2004-07-07 07:39:59 +0000559 rm -f z50c.$out_fmt
Josh Coalson8fac5d62002-12-12 03:57:47 +0000560
Josh Coalson8232e292002-12-14 06:22:22 +0000561 #
562 # test --skip and --until when encoding
563 #
Josh Coalson8fac5d62002-12-12 03:57:47 +0000564
Josh Coalson3e3ad0c2004-07-07 07:39:59 +0000565 echo -n "testing --skip=10 --until=# (encode) $desc... "
566 run_flac $eopt --skip=10 --until=40 -o z50c.skip10.until40.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
Josh Coalsonbfda3782006-08-28 03:42:10 +0000567 [ $in_fmt = $out_fmt ] || run_flac $dopt -o z50c.skip10.until40.$in_fmt z50c.skip10.until40.$out_fmt || die "ERROR decoding FLAC file $desc"
568 $CMP 50c.skip10.until40.$in_fmt z50c.skip10.until40.$in_fmt || die "ERROR: file mismatch for --skip=10 --until=40 (encode) $desc"
Josh Coalson3e3ad0c2004-07-07 07:39:59 +0000569 rm -f z50c.skip10.until40.$out_fmt z50c.skip10.until40.$in_fmt
Josh Coalson8232e292002-12-14 06:22:22 +0000570 echo OK
Josh Coalson8fac5d62002-12-12 03:57:47 +0000571
Josh Coalson3e3ad0c2004-07-07 07:39:59 +0000572 echo -n "testing --skip=10 --until=mm:ss (encode) $desc... "
Josh Coalson3b938ac2008-06-03 06:33:44 +0000573 run_flac $eopt --skip=10 --until=0:04 -o z50c.skip10.until0_04.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
574 [ $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"
575 $CMP 50c.skip10.until40.$in_fmt z50c.skip10.until0_04.$in_fmt || die "ERROR: file mismatch for --skip=10 --until=0:04 (encode) $desc"
576 rm -f z50c.skip10.until0_04.$out_fmt z50c.skip10.until0_04.$in_fmt
Josh Coalson8232e292002-12-14 06:22:22 +0000577 echo OK
Josh Coalson8fac5d62002-12-12 03:57:47 +0000578
Josh Coalson3e3ad0c2004-07-07 07:39:59 +0000579 echo -n "testing --skip=10 --until=mm:ss.sss (encode) $desc... "
Josh Coalson3b938ac2008-06-03 06:33:44 +0000580 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"
581 [ $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"
582 $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"
583 rm -f z50c.skip10.until0_03.9001.$out_fmt z50c.skip10.until0_03.9001.$in_fmt
Josh Coalson8232e292002-12-14 06:22:22 +0000584 echo OK
Josh Coalson8fac5d62002-12-12 03:57:47 +0000585
Josh Coalson3e3ad0c2004-07-07 07:39:59 +0000586 echo -n "testing --skip=10 --until=+# (encode) $desc... "
587 run_flac $eopt --skip=10 --until=+30 -o z50c.skip10.until+30.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
Josh Coalsonbfda3782006-08-28 03:42:10 +0000588 [ $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"
589 $CMP 50c.skip10.until40.$in_fmt z50c.skip10.until+30.$in_fmt || die "ERROR: file mismatch for --skip=10 --until=+30 (encode) $desc"
Josh Coalson3e3ad0c2004-07-07 07:39:59 +0000590 rm -f z50c.skip10.until+30.$out_fmt z50c.skip10.until+30.$in_fmt
Josh Coalson8232e292002-12-14 06:22:22 +0000591 echo OK
Josh Coalson8fac5d62002-12-12 03:57:47 +0000592
Josh Coalson3e3ad0c2004-07-07 07:39:59 +0000593 echo -n "testing --skip=10 --until=+mm:ss (encode) $desc... "
Josh Coalson3b938ac2008-06-03 06:33:44 +0000594 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"
595 [ $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"
596 $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"
597 rm -f z50c.skip10.until+0_03.$out_fmt z50c.skip10.until+0_03.$in_fmt
Josh Coalson8232e292002-12-14 06:22:22 +0000598 echo OK
Josh Coalson8fac5d62002-12-12 03:57:47 +0000599
Josh Coalson3e3ad0c2004-07-07 07:39:59 +0000600 echo -n "testing --skip=10 --until=+mm:ss.sss (encode) $desc... "
Josh Coalson3b938ac2008-06-03 06:33:44 +0000601 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"
602 [ $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"
603 $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"
604 rm -f z50c.skip10.until+0_02.9001.$out_fmt z50c.skip10.until+0_02.9001.$in_fmt
Josh Coalson8232e292002-12-14 06:22:22 +0000605 echo OK
Josh Coalson8fac5d62002-12-12 03:57:47 +0000606
Josh Coalson3e3ad0c2004-07-07 07:39:59 +0000607 echo -n "testing --skip=10 --until=-# (encode) $desc... "
608 run_flac $eopt --skip=10 --until=-10 -o z50c.skip10.until-10.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
Josh Coalsonbfda3782006-08-28 03:42:10 +0000609 [ $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"
610 $CMP 50c.skip10.until40.$in_fmt z50c.skip10.until-10.$in_fmt || die "ERROR: file mismatch for --skip=10 --until=-10 (encode) $desc"
Josh Coalson3e3ad0c2004-07-07 07:39:59 +0000611 rm -f z50c.skip10.until-10.$out_fmt z50c.skip10.until-10.$in_fmt
Josh Coalson8232e292002-12-14 06:22:22 +0000612 echo OK
Josh Coalson8fac5d62002-12-12 03:57:47 +0000613
Josh Coalson3e3ad0c2004-07-07 07:39:59 +0000614 echo -n "testing --skip=10 --until=-mm:ss (encode) $desc... "
Josh Coalson3b938ac2008-06-03 06:33:44 +0000615 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"
616 [ $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"
617 $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"
618 rm -f z50c.skip10.until-0_01.$out_fmt z50c.skip10.until-0_01.$in_fmt
Josh Coalson8232e292002-12-14 06:22:22 +0000619 echo OK
Josh Coalson8fac5d62002-12-12 03:57:47 +0000620
Josh Coalson3e3ad0c2004-07-07 07:39:59 +0000621 echo -n "testing --skip=10 --until=-mm:ss.sss (encode) $desc... "
Josh Coalson3b938ac2008-06-03 06:33:44 +0000622 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"
623 [ $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"
624 $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"
625 rm -f z50c.skip10.until-0_01.1001.$out_fmt z50c.skip10.until-0_01.1001.$in_fmt
Josh Coalson8232e292002-12-14 06:22:22 +0000626 echo OK
Josh Coalson8fac5d62002-12-12 03:57:47 +0000627
Josh Coalson8232e292002-12-14 06:22:22 +0000628 #
629 # test --skip and --until when decoding
630 #
Josh Coalson8fac5d62002-12-12 03:57:47 +0000631
Josh Coalsonbfda3782006-08-28 03:42:10 +0000632 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"
633
Josh Coalson8fac5d62002-12-12 03:57:47 +0000634
Josh Coalson3e3ad0c2004-07-07 07:39:59 +0000635 echo -n "testing --skip=10 --until=# (decode) $desc... "
636 run_flac $dopt --skip=10 --until=40 -o z50c.skip10.until40.$in_fmt z50c.$out_fmt || die "ERROR decoding FLAC file $desc"
Josh Coalsonbfda3782006-08-28 03:42:10 +0000637 $CMP 50c.skip10.until40.$in_fmt z50c.skip10.until40.$in_fmt || die "ERROR: file mismatch for --skip=10 --until=40 (decode) $desc"
Josh Coalson3e3ad0c2004-07-07 07:39:59 +0000638 rm -f z50c.skip10.until40.$in_fmt
Josh Coalson8232e292002-12-14 06:22:22 +0000639 echo OK
Josh Coalson8fac5d62002-12-12 03:57:47 +0000640
Josh Coalson3e3ad0c2004-07-07 07:39:59 +0000641 echo -n "testing --skip=10 --until=mm:ss (decode) $desc... "
Josh Coalson3b938ac2008-06-03 06:33:44 +0000642 run_flac $dopt --skip=10 --until=0:04 -o z50c.skip10.until0_04.$in_fmt z50c.$out_fmt || die "ERROR decoding FLAC file $desc"
643 $CMP 50c.skip10.until40.$in_fmt z50c.skip10.until0_04.$in_fmt || die "ERROR: file mismatch for --skip=10 --until=0:04 (decode) $desc"
644 rm -f z50c.skip10.until0_04.$in_fmt
Josh Coalson8232e292002-12-14 06:22:22 +0000645 echo OK
Josh Coalson8fac5d62002-12-12 03:57:47 +0000646
Josh Coalson3e3ad0c2004-07-07 07:39:59 +0000647 echo -n "testing --skip=10 --until=mm:ss.sss (decode) $desc... "
Josh Coalson3b938ac2008-06-03 06:33:44 +0000648 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"
649 $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"
650 rm -f z50c.skip10.until0_03.9001.$in_fmt
Josh Coalson8232e292002-12-14 06:22:22 +0000651 echo OK
Josh Coalson8fac5d62002-12-12 03:57:47 +0000652
Josh Coalson3e3ad0c2004-07-07 07:39:59 +0000653 echo -n "testing --skip=10 --until=-# (decode) $desc... "
654 run_flac $dopt --skip=10 --until=-10 -o z50c.skip10.until-10.$in_fmt z50c.$out_fmt || die "ERROR decoding FLAC file $desc"
Josh Coalsonbfda3782006-08-28 03:42:10 +0000655 $CMP 50c.skip10.until40.$in_fmt z50c.skip10.until-10.$in_fmt || die "ERROR: file mismatch for --skip=10 --until=-10 (decode) $desc"
Josh Coalson3e3ad0c2004-07-07 07:39:59 +0000656 rm -f z50c.skip10.until-10.$in_fmt
Josh Coalson8232e292002-12-14 06:22:22 +0000657 echo OK
658
Josh Coalson3e3ad0c2004-07-07 07:39:59 +0000659 echo -n "testing --skip=10 --until=-mm:ss (decode) $desc... "
Josh Coalson3b938ac2008-06-03 06:33:44 +0000660 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"
661 $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"
662 rm -f z50c.skip10.until-0_01.$in_fmt
Josh Coalson8232e292002-12-14 06:22:22 +0000663 echo OK
664
Josh Coalson3e3ad0c2004-07-07 07:39:59 +0000665 echo -n "testing --skip=10 --until=-mm:ss.sss (decode) $desc... "
Josh Coalson3b938ac2008-06-03 06:33:44 +0000666 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"
667 $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"
668 rm -f z50c.skip10.until-0_01.1001.$in_fmt
Josh Coalson8232e292002-12-14 06:22:22 +0000669 echo OK
670
Josh Coalson3e3ad0c2004-07-07 07:39:59 +0000671 rm -f z50c.$out_fmt
Josh Coalson8232e292002-12-14 06:22:22 +0000672}
673
Josh Coalson3e3ad0c2004-07-07 07:39:59 +0000674test_skip_until raw flac
675test_skip_until wav flac
676test_skip_until aiff flac
Josh Coalsonbfda3782006-08-28 03:42:10 +0000677test_skip_until flac flac
Josh Coalsonc28efe22006-11-04 03:04:21 +0000678#@@@if [ $has_ogg = yes ] ; then
679#@@@ #@@@ doesn't work yet because md5cmp doesn't work because metaflac doesn't work on ogg flac yet
680#@@@ test_skip_until ogg flac
681#@@@fi
Josh Coalson463d0f82002-12-10 06:41:27 +0000682
Josh Coalsonc28efe22006-11-04 03:04:21 +0000683if [ $has_ogg = yes ] ; then
Josh Coalson3e3ad0c2004-07-07 07:39:59 +0000684 test_skip_until raw ogg
685 test_skip_until wav ogg
686 test_skip_until aiff ogg
Josh Coalsonc28efe22006-11-04 03:04:21 +0000687 #@@@ doesn't work yet because md5cmp doesn't work because metaflac doesn't work on ogg flac yet
Josh Coalsonbfda3782006-08-28 03:42:10 +0000688 #@@@test_skip_until flac ogg
Josh Coalsonc28efe22006-11-04 03:04:21 +0000689 #@@@test_skip_until ogg ogg
Josh Coalson3e3ad0c2004-07-07 07:39:59 +0000690fi
Josh Coalson9238a142002-12-21 03:29:26 +0000691
Josh Coalson70d85632004-09-21 05:29:01 +0000692echo "testing seek extremes:"
Josh Coalson29f52ea2004-07-30 00:22:46 +0000693
Erik de Castro Lopobb2abea2015-02-13 19:47:30 +1100694run_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"
Josh Coalson29f52ea2004-07-30 00:22:46 +0000695
Josh Coalsond4346722004-09-12 22:58:13 +0000696if [ $is_win = no ] ; then
Josh Coalsonc2751e62005-08-27 01:57:39 +0000697 total_noise_cdda_samples=`run_metaflac --show-total-samples noise.flac`
Josh Coalsond4346722004-09-12 22:58:13 +0000698 [ $? = 0 ] || die "ERROR getting total sample count from noise.flac"
699else
700 # some flavors of cygwin don't seem to treat the \x0d as a word
701 # separator, so we hard code it. we'll just have to fix it later
702 # if we change the way noise.flac is made.
Josh Coalsonc2751e62005-08-27 01:57:39 +0000703 total_noise_cdda_samples=393216
Josh Coalsond4346722004-09-12 22:58:13 +0000704fi
Josh Coalson29f52ea2004-07-30 00:22:46 +0000705
Josh Coalson70d85632004-09-21 05:29:01 +0000706echo -n "testing --skip=0... "
Josh Coalson4f4beee2004-07-30 00:35:51 +0000707run_flac $wav_dopt --skip=0 -o z.wav noise.flac || die "ERROR decoding FLAC file noise.flac"
Josh Coalson29f52ea2004-07-30 00:22:46 +0000708echo OK
709
710for delta in 2 1 ; do
Josh Coalsonc2751e62005-08-27 01:57:39 +0000711 n=`expr $total_noise_cdda_samples - $delta`
Josh Coalson70d85632004-09-21 05:29:01 +0000712 echo -n "testing --skip=$n... "
Josh Coalson4f4beee2004-07-30 00:35:51 +0000713 run_flac $wav_dopt --skip=$n -o z.wav noise.flac || die "ERROR decoding FLAC file noise.flac"
Josh Coalson29f52ea2004-07-30 00:22:46 +0000714 echo OK
715done
716
717rm noise.flac z.wav
718
Josh Coalson9238a142002-12-21 03:29:26 +0000719############################################################################
Josh Coalsondad6ad42004-12-30 03:49:46 +0000720# test --input-size
721############################################################################
722
Josh Coalsonc0da1962006-09-16 00:07:20 +0000723#@@@ cat will not work on old cygwin, need to fix
Josh Coalson47a6b5f2005-02-02 01:50:47 +0000724if [ $is_win = no ] ; then
725 echo -n "testing --input-size=50 --skip=10... "
726 cat 50c.raw | run_flac $raw_eopt --input-size=50 --skip=10 -o z50c.skip10.flac - || die "ERROR generating FLAC file"
727 run_flac $raw_dopt -o z50c.skip10.raw z50c.skip10.flac || die "ERROR decoding FLAC file"
728 cmp 50c.skip10.raw z50c.skip10.raw || die "ERROR: file mismatch for --input-size=50 --skip=10"
729 rm -f z50c.skip10.raw z50c.skip10.flac
730 echo OK
731fi
Josh Coalsondad6ad42004-12-30 03:49:46 +0000732
733
734############################################################################
Josh Coalson03a5a692004-07-17 00:23:17 +0000735# test --cue
736############################################################################
737
738#
739# create the cue sheet
740#
741cuesheet=cuetest.cue
742cat > $cuesheet << EOF
743CATALOG 1234567890123
744FILE "blah" WAVE
745 TRACK 01 AUDIO
746 INDEX 01 0
747 INDEX 02 10
748 INDEX 03 20
749 TRACK 02 AUDIO
750 INDEX 01 30
751 TRACK 04 AUDIO
752 INDEX 01 40
753EOF
754
755test_cue ()
756{
757 in_fmt=$1
758 out_fmt=$2
759
Josh Coalsonc28efe22006-11-04 03:04:21 +0000760 [ "$in_fmt" = wav ] || [ "$in_fmt" = aiff ] || [ "$in_fmt" = raw ] || [ "$in_fmt" = flac ] || [ "$in_fmt" = ogg ] || die "ERROR: internal error, bad 'in' format '$in_fmt'"
Josh Coalson03a5a692004-07-17 00:23:17 +0000761
762 [ "$out_fmt" = flac ] || [ "$out_fmt" = ogg ] || die "ERROR: internal error, bad 'out' format '$out_fmt'"
763
764 if [ $in_fmt = raw ] ; then
765 eopt="$raw_eopt"
766 dopt="$raw_dopt"
767 else
768 eopt="$wav_eopt"
769 dopt="$wav_dopt"
770 fi
771
Josh Coalsonc28efe22006-11-04 03:04:21 +0000772 if ( [ $in_fmt = flac ] || [ $in_fmt = ogg ] ) && ( [ $out_fmt = flac ] || [ $out_fmt = ogg ] ) ; then
Josh Coalsonbfda3782006-08-28 03:42:10 +0000773 CMP=md5cmp
774 else
775 CMP=cmp
776 fi
777
Josh Coalson03a5a692004-07-17 00:23:17 +0000778 if [ $out_fmt = ogg ] ; then
779 eopt="--ogg $eopt"
780 fi
781
782 desc="($in_fmt<->$out_fmt)"
783
784 #
785 # for this we need just need just one FLAC file; --cue only works while decoding
786 #
787 run_flac $eopt --cuesheet=$cuesheet -o z50c.cue.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
788
789 # To make it easy to translate from cue point to sample numbers, the
790 # file has a sample rate of 10 Hz and a cuesheet like so:
791 #
792 # TRACK 01, INDEX 01 : 0:00.00 -> sample 0
793 # TRACK 01, INDEX 02 : 0:01.00 -> sample 10
794 # TRACK 01, INDEX 03 : 0:02.00 -> sample 20
795 # TRACK 02, INDEX 01 : 0:03.00 -> sample 30
796 # TRACK 04, INDEX 01 : 0:04.00 -> sample 40
797 #
798 echo -n "testing --cue=- $desc... "
Josh Coalsonbfda3782006-08-28 03:42:10 +0000799 run_flac $dopt -o z50c.cued.$in_fmt --cue=- z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
800 $CMP 50c.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=- $desc"
801 rm -f z50c.cued.$in_fmt
Josh Coalson03a5a692004-07-17 00:23:17 +0000802 echo OK
803
804 echo -n "testing --cue=1.0 $desc... "
Josh Coalsonbfda3782006-08-28 03:42:10 +0000805 run_flac $dopt -o z50c.cued.$in_fmt --cue=1.0 z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
806 $CMP 50c.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=1.0 $desc"
807 rm -f z50c.cued.$in_fmt
Josh Coalson03a5a692004-07-17 00:23:17 +0000808 echo OK
809
810 echo -n "testing --cue=1.0- $desc... "
Josh Coalsonbfda3782006-08-28 03:42:10 +0000811 run_flac $dopt -o z50c.cued.$in_fmt --cue=1.0- z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
812 $CMP 50c.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=1.0- $desc"
813 rm -f z50c.cued.$in_fmt
Josh Coalson03a5a692004-07-17 00:23:17 +0000814 echo OK
815
816 echo -n "testing --cue=1.1 $desc... "
Josh Coalsonbfda3782006-08-28 03:42:10 +0000817 run_flac $dopt -o z50c.cued.$in_fmt --cue=1.1 z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
818 $CMP 50c.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=1.1 $desc"
819 rm -f z50c.cued.$in_fmt
Josh Coalson03a5a692004-07-17 00:23:17 +0000820 echo OK
821
822 echo -n "testing --cue=1.1- $desc... "
Josh Coalsonbfda3782006-08-28 03:42:10 +0000823 run_flac $dopt -o z50c.cued.$in_fmt --cue=1.1- z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
824 $CMP 50c.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=1.1- $desc"
825 rm -f z50c.cued.$in_fmt
Josh Coalson03a5a692004-07-17 00:23:17 +0000826 echo OK
827
828 echo -n "testing --cue=1.2 $desc... "
Josh Coalsonbfda3782006-08-28 03:42:10 +0000829 run_flac $dopt -o z50c.cued.$in_fmt --cue=1.2 z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
830 $CMP 50c.skip10.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=1.2 $desc"
831 rm -f z50c.cued.$in_fmt
Josh Coalson03a5a692004-07-17 00:23:17 +0000832 echo OK
833
834 echo -n "testing --cue=1.2- $desc... "
Josh Coalsonbfda3782006-08-28 03:42:10 +0000835 run_flac $dopt -o z50c.cued.$in_fmt --cue=1.2- z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
836 $CMP 50c.skip10.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=1.2- $desc"
837 rm -f z50c.cued.$in_fmt
Josh Coalson03a5a692004-07-17 00:23:17 +0000838 echo OK
839
840 echo -n "testing --cue=1.4 $desc... "
Josh Coalsonbfda3782006-08-28 03:42:10 +0000841 run_flac $dopt -o z50c.cued.$in_fmt --cue=1.4 z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
842 $CMP 50c.skip20.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=1.4 $desc"
843 rm -f z50c.cued.$in_fmt
Josh Coalson03a5a692004-07-17 00:23:17 +0000844 echo OK
845
846 echo -n "testing --cue=1.4- $desc... "
Josh Coalsonbfda3782006-08-28 03:42:10 +0000847 run_flac $dopt -o z50c.cued.$in_fmt --cue=1.4- z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
848 $CMP 50c.skip20.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=1.4- $desc"
849 rm -f z50c.cued.$in_fmt
Josh Coalson03a5a692004-07-17 00:23:17 +0000850 echo OK
851
852 echo -n "testing --cue=-5.0 $desc... "
Josh Coalsonbfda3782006-08-28 03:42:10 +0000853 run_flac $dopt -o z50c.cued.$in_fmt --cue=-5.0 z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
854 $CMP 50c.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=-5.0 $desc"
855 rm -f z50c.cued.$in_fmt
Josh Coalson03a5a692004-07-17 00:23:17 +0000856 echo OK
857
858 echo -n "testing --cue=-4.1 $desc... "
Josh Coalsonbfda3782006-08-28 03:42:10 +0000859 run_flac $dopt -o z50c.cued.$in_fmt --cue=-4.1 z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
860 $CMP 50c.until40.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=-4.1 $desc"
861 rm -f z50c.cued.$in_fmt
Josh Coalson03a5a692004-07-17 00:23:17 +0000862 echo OK
863
864 echo -n "testing --cue=-3.1 $desc... "
Josh Coalsonbfda3782006-08-28 03:42:10 +0000865 run_flac $dopt -o z50c.cued.$in_fmt --cue=-3.1 z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
866 $CMP 50c.until40.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=-3.1 $desc"
867 rm -f z50c.cued.$in_fmt
Josh Coalson03a5a692004-07-17 00:23:17 +0000868 echo OK
869
870 echo -n "testing --cue=-1.4 $desc... "
Josh Coalsonbfda3782006-08-28 03:42:10 +0000871 run_flac $dopt -o z50c.cued.$in_fmt --cue=-1.4 z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
872 $CMP 50c.until30.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=-1.4 $desc"
873 rm -f z50c.cued.$in_fmt
Josh Coalson03a5a692004-07-17 00:23:17 +0000874 echo OK
875
876 echo -n "testing --cue=1.0-5.0 $desc... "
Josh Coalsonbfda3782006-08-28 03:42:10 +0000877 run_flac $dopt -o z50c.cued.$in_fmt --cue=1.0-5.0 z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
878 $CMP 50c.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=1.0-5.0 $desc"
879 rm -f z50c.cued.$in_fmt
Josh Coalson03a5a692004-07-17 00:23:17 +0000880 echo OK
881
882 echo -n "testing --cue=1.1-5.0 $desc... "
Josh Coalsonbfda3782006-08-28 03:42:10 +0000883 run_flac $dopt -o z50c.cued.$in_fmt --cue=1.1-5.0 z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
884 $CMP 50c.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=1.1-5.0 $desc"
885 rm -f z50c.cued.$in_fmt
Josh Coalson03a5a692004-07-17 00:23:17 +0000886 echo OK
887
888 echo -n "testing --cue=1.2-4.1 $desc... "
Josh Coalsonbfda3782006-08-28 03:42:10 +0000889 run_flac $dopt -o z50c.cued.$in_fmt --cue=1.2-4.1 z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
890 $CMP 50c.skip10.until40.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=1.2-4.1 $desc"
891 rm -f z50c.cued.$in_fmt
Josh Coalson03a5a692004-07-17 00:23:17 +0000892 echo OK
893
894 echo -n "testing --cue=1.4-2.0 $desc... "
Josh Coalsonbfda3782006-08-28 03:42:10 +0000895 run_flac $dopt -o z50c.cued.$in_fmt --cue=1.4-2.0 z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
896 $CMP 50c.skip20.until30.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=1.4-2.0 $desc"
897 rm -f z50c.cued.$in_fmt
Josh Coalson03a5a692004-07-17 00:23:17 +0000898 echo OK
899
900 rm -f z50c.cue.$out_fmt
901}
902
903test_cue raw flac
904test_cue wav flac
905test_cue aiff flac
Josh Coalsonbfda3782006-08-28 03:42:10 +0000906test_cue flac flac
Josh Coalsonc28efe22006-11-04 03:04:21 +0000907#@@@if [ $has_ogg = yes ] ; then
908#@@@ #@@@ doesn't work yet because md5cmp doesn't work because metaflac doesn't work on ogg flac yet
909#@@@ test_cue ogg flac
910#@@@fi
Josh Coalson03a5a692004-07-17 00:23:17 +0000911
Josh Coalsonc28efe22006-11-04 03:04:21 +0000912if [ $has_ogg = yes ] ; then
Josh Coalson03a5a692004-07-17 00:23:17 +0000913 test_cue raw ogg
914 test_cue wav ogg
915 test_cue aiff ogg
Josh Coalsonc28efe22006-11-04 03:04:21 +0000916 #@@@ doesn't work yet because md5cmp doesn't work because metaflac doesn't work on ogg flac yet
Josh Coalsonbfda3782006-08-28 03:42:10 +0000917 #@@@test_cue flac ogg
Josh Coalsonc28efe22006-11-04 03:04:21 +0000918 #@@@test_cue ogg ogg
Josh Coalson03a5a692004-07-17 00:23:17 +0000919fi
920
921############################################################################
Josh Coalson9238a142002-12-21 03:29:26 +0000922# test 'fixup' code that happens when a FLAC file with total_samples == 0
923# in the STREAMINFO block is converted to WAVE or AIFF, requiring the
924# decoder go back and fix up the chunk headers
925############################################################################
926
927echo -n "WAVE fixup test... "
Josh Coalsond4346722004-09-12 22:58:13 +0000928
Josh Coalson9238a142002-12-21 03:29:26 +0000929echo -n "prepare... "
Josh Coalsonc2751e62005-08-27 01:57:39 +0000930convert_to_wav noise "$raw_eopt" "$wav_dopt" || die "ERROR creating reference WAVE"
Josh Coalsond4346722004-09-12 22:58:13 +0000931
Josh Coalson9238a142002-12-21 03:29:26 +0000932echo -n "encode... "
Josh Coalsond4346722004-09-12 22:58:13 +0000933# the pipe from 'cat' to 'flac' does not work on cygwin because of the EOF/
934# binary-mode stdin problem, so we use an undocumented option to metaflac to
935# set the total sample count to 0
936if [ $is_win = yes ] ; then
937 run_flac $raw_eopt noise.raw -o fixup.flac || die "ERROR generating FLAC file"
Josh Coalson68d13212004-09-14 00:25:43 +0000938 run_metaflac --set-total-samples=0 fixup.flac 2> /dev/null
Josh Coalsond4346722004-09-12 22:58:13 +0000939else
940 cat noise.raw | run_flac $raw_eopt - -c > fixup.flac || die "ERROR generating FLAC file"
941fi
942
Josh Coalson9238a142002-12-21 03:29:26 +0000943echo -n "decode... "
944run_flac $wav_dopt fixup.flac -o fixup.wav || die "ERROR decoding FLAC file"
Josh Coalsond4346722004-09-12 22:58:13 +0000945
Josh Coalson9238a142002-12-21 03:29:26 +0000946echo -n "compare... "
947cmp noise.wav fixup.wav || die "ERROR: file mismatch"
Josh Coalsond4346722004-09-12 22:58:13 +0000948
Josh Coalson9238a142002-12-21 03:29:26 +0000949echo OK
950rm -f noise.wav fixup.wav fixup.flac
951
952echo -n "AIFF fixup test... "
Josh Coalsond4346722004-09-12 22:58:13 +0000953
Josh Coalson9238a142002-12-21 03:29:26 +0000954echo -n "prepare... "
Josh Coalsonc2751e62005-08-27 01:57:39 +0000955convert_to_aiff noise "$raw_eopt" "$wav_dopt" || die "ERROR creating reference AIFF"
Josh Coalsond4346722004-09-12 22:58:13 +0000956
Josh Coalson9238a142002-12-21 03:29:26 +0000957echo -n "encode... "
Josh Coalsond4346722004-09-12 22:58:13 +0000958# the pipe from 'cat' to 'flac' does not work on cygwin because of the EOF/
959# binary-mode stdin problem, so we use an undocumented option to metaflac to
960# set the total sample count to 0
961if [ $is_win = yes ] ; then
962 run_flac $raw_eopt noise.raw -o fixup.flac || die "ERROR generating FLAC file"
Josh Coalson68d13212004-09-14 00:25:43 +0000963 run_metaflac --set-total-samples=0 fixup.flac 2> /dev/null
Josh Coalsond4346722004-09-12 22:58:13 +0000964else
965 cat noise.raw | run_flac $raw_eopt - -c > fixup.flac || die "ERROR generating FLAC file"
966fi
967
Josh Coalson9238a142002-12-21 03:29:26 +0000968echo -n "decode... "
969run_flac $wav_dopt fixup.flac -o fixup.aiff || die "ERROR decoding FLAC file"
Josh Coalsond4346722004-09-12 22:58:13 +0000970
Josh Coalson9238a142002-12-21 03:29:26 +0000971echo -n "compare... "
972cmp noise.aiff fixup.aiff || die "ERROR: file mismatch"
Josh Coalsond4346722004-09-12 22:58:13 +0000973
Josh Coalson9238a142002-12-21 03:29:26 +0000974echo OK
975rm -f noise.aiff fixup.aiff fixup.flac
976
977
978############################################################################
Josh Coalson463d0f82002-12-10 06:41:27 +0000979# multi-file tests
Josh Coalson9238a142002-12-21 03:29:26 +0000980############################################################################
Josh Coalson463d0f82002-12-10 06:41:27 +0000981
Josh Coalson463d0f82002-12-10 06:41:27 +0000982echo "Generating multiple input files from noise..."
Josh Coalsonc2751e62005-08-27 01:57:39 +0000983multifile_format_decode="--endian=big --sign=signed"
Josh Coalson5ebd6932006-11-17 06:03:18 +0000984multifile_format_encode="$multifile_format_decode --sample-rate=44100 --bps=16 --channels=2 --no-padding"
Josh Coalsonbfda3782006-08-28 03:42:10 +0000985short_noise_cdda_samples=`expr $total_noise_cdda_samples / 8`
Erik de Castro Lopobb2abea2015-02-13 19:47:30 +1100986run_flac --verify --force --force-raw-format $multifile_format_encode --until=$short_noise_cdda_samples -o shortnoise.flac noise.raw || die "ERROR generating FLAC file"
987run_flac --decode --force shortnoise.flac -o shortnoise.raw --force-raw-format $multifile_format_decode || die "ERROR generating RAW file"
988run_flac --decode --force shortnoise.flac || die "ERROR generating WAVE file"
989run_flac --decode --force shortnoise.flac -o shortnoise.aiff || die "ERROR generating AIFF file"
Josh Coalsonbfda3782006-08-28 03:42:10 +0000990cp shortnoise.flac file0.flac
991cp shortnoise.flac file1.flac
992cp shortnoise.flac file2.flac
993rm -f shortnoise.flac
994cp shortnoise.wav file0.wav
995cp shortnoise.wav file1.wav
996cp shortnoise.wav file2.wav
997rm -f shortnoise.wav
998cp shortnoise.aiff file0.aiff
999cp shortnoise.aiff file1.aiff
1000cp shortnoise.aiff file2.aiff
1001rm -f shortnoise.aiff
1002cp shortnoise.raw file0.raw
1003cp shortnoise.raw file1.raw
1004cp shortnoise.raw file2.raw
1005rm -f shortnoise.raw
Josh Coalsonc2751e62005-08-27 01:57:39 +00001006# create authoritative sector-aligned files for comparison
Josh Coalsonbfda3782006-08-28 03:42:10 +00001007file0_samples=`expr \( $short_noise_cdda_samples / 588 \) \* 588`
1008file0_remainder=`expr $short_noise_cdda_samples - $file0_samples`
1009file1_samples=`expr \( \( $file0_remainder + $short_noise_cdda_samples \) / 588 \) \* 588`
1010file1_remainder=`expr $file0_remainder + $short_noise_cdda_samples - $file1_samples`
Josh Coalsonc2751e62005-08-27 01:57:39 +00001011file1_samples=`expr $file1_samples - $file0_remainder`
Josh Coalsonbfda3782006-08-28 03:42:10 +00001012file2_samples=`expr \( \( $file1_remainder + $short_noise_cdda_samples \) / 588 \) \* 588`
1013file2_remainder=`expr $file1_remainder + $short_noise_cdda_samples - $file2_samples`
Josh Coalsonc2751e62005-08-27 01:57:39 +00001014file2_samples=`expr $file2_samples - $file1_remainder`
1015if [ $file2_remainder != '0' ] ; then
1016 file2_samples=`expr $file2_samples + $file2_remainder`
1017 file2_remainder=`expr 588 - $file2_remainder`
1018fi
1019
1020dd if=file0.raw ibs=4 count=$file0_samples of=file0s.raw 2>/dev/null || $dddie
1021dd if=file0.raw ibs=4 count=$file0_remainder of=file1s.raw skip=$file0_samples 2>/dev/null || $dddie
1022dd if=file1.raw ibs=4 count=$file1_samples of=z.raw 2>/dev/null || $dddie
1023cat z.raw >> file1s.raw || die "ERROR: cat-ing sector-aligned files"
1024dd if=file1.raw ibs=4 count=$file1_remainder of=file2s.raw skip=$file1_samples 2>/dev/null || $dddie
1025dd if=file2.raw ibs=4 count=$file2_samples of=z.raw 2>/dev/null || $dddie
1026cat z.raw >> file2s.raw || die "ERROR: cat-ing sector-aligned files"
1027dd if=/dev/zero ibs=4 count=$file2_remainder of=z.raw 2>/dev/null || $dddie
1028cat z.raw >> file2s.raw || die "ERROR: cat-ing sector-aligned files"
1029rm -f z.raw
1030
Erik de Castro Lopo879a0ce2014-07-13 20:38:57 +10001031convert_to_wav file0s "$multifile_format_encode --force --force-raw-format" "$SILENT --force --decode" || die "ERROR creating authoritative sector-aligned WAVE"
1032convert_to_wav file1s "$multifile_format_encode --force --force-raw-format" "$SILENT --force --decode" || die "ERROR creating authoritative sector-aligned WAVE"
1033convert_to_wav file2s "$multifile_format_encode --force --force-raw-format" "$SILENT --force --decode" || die "ERROR creating authoritative sector-aligned WAVE"
Josh Coalsonc2751e62005-08-27 01:57:39 +00001034
Erik de Castro Lopo879a0ce2014-07-13 20:38:57 +10001035convert_to_aiff file0s "$multifile_format_encode --force --force-raw-format" "$SILENT --force --decode" || die "ERROR creating authoritative sector-aligned AIFF"
1036convert_to_aiff file1s "$multifile_format_encode --force --force-raw-format" "$SILENT --force --decode" || die "ERROR creating authoritative sector-aligned AIFF"
1037convert_to_aiff file2s "$multifile_format_encode --force --force-raw-format" "$SILENT --force --decode" || die "ERROR creating authoritative sector-aligned AIFF"
Josh Coalson463d0f82002-12-10 06:41:27 +00001038
1039test_multifile ()
1040{
Josh Coalsonc2751e62005-08-27 01:57:39 +00001041 input_type=$1
1042 streamtype=$2
1043 sector_align=$3
1044 encode_options="$4"
1045
1046 extra_encode_options=""
1047 extra_decode_options=""
1048 if [ $input_type = "raw" ] ; then
1049 extra_encode_options="--force-raw-format $multifile_format_encode"
1050 extra_decode_options="--force-raw-format $multifile_format_decode"
1051 else
1052 if [ $input_type = "aiff" ] ; then
1053 extra_decode_options="--force-aiff-format"
1054 fi
1055 fi
Josh Coalson463d0f82002-12-10 06:41:27 +00001056
1057 if [ $streamtype = ogg ] ; then
Josh Coalson12d3a412007-08-01 03:02:00 +00001058 suffix=oga
Josh Coalson463d0f82002-12-10 06:41:27 +00001059 encode_options="$encode_options --ogg"
1060 else
1061 suffix=flac
1062 fi
1063
1064 if [ $sector_align = sector_align ] ; then
1065 encode_options="$encode_options --sector-align"
1066 fi
1067
Josh Coalsonc28efe22006-11-04 03:04:21 +00001068 if [ $input_type = flac ] || [ $input_type = ogg ] ; then
Josh Coalsonbfda3782006-08-28 03:42:10 +00001069 CMP=md5cmp
1070 else
1071 CMP=cmp
1072 fi
1073
Josh Coalson463d0f82002-12-10 06:41:27 +00001074 for n in 0 1 2 ; do
Josh Coalsonbfda3782006-08-28 03:42:10 +00001075 cp file$n.$input_type file${n}x.$input_type
Josh Coalson463d0f82002-12-10 06:41:27 +00001076 done
Josh Coalsonbfda3782006-08-28 03:42:10 +00001077 run_flac --force $encode_options $extra_encode_options file0x.$input_type file1x.$input_type file2x.$input_type || die "ERROR"
Josh Coalsonc2751e62005-08-27 01:57:39 +00001078 run_flac --force --decode $extra_decode_options file0x.$suffix file1x.$suffix file2x.$suffix || die "ERROR"
Josh Coalson463d0f82002-12-10 06:41:27 +00001079 if [ $sector_align != sector_align ] ; then
1080 for n in 0 1 2 ; do
Josh Coalsonbfda3782006-08-28 03:42:10 +00001081 $CMP file$n.$input_type file${n}x.$input_type || die "ERROR: file mismatch on file #$n"
Josh Coalsonc2751e62005-08-27 01:57:39 +00001082 done
1083 else
1084 for n in 0 1 2 ; do
Josh Coalsonbfda3782006-08-28 03:42:10 +00001085 $CMP file${n}s.$input_type file${n}x.$input_type || die "ERROR: file mismatch on file #$n"
Josh Coalson463d0f82002-12-10 06:41:27 +00001086 done
1087 fi
1088 for n in 0 1 2 ; do
Josh Coalsonc2751e62005-08-27 01:57:39 +00001089 rm -f file${n}x.$suffix file${n}x.$input_type
Josh Coalson463d0f82002-12-10 06:41:27 +00001090 done
1091}
1092
Josh Coalsonc28efe22006-11-04 03:04:21 +00001093input_types="raw wav aiff flac"
1094#@@@ doesn't work yet because md5cmp doesn't work because metaflac doesn't work on ogg flac yet
1095#@@@if [ $has_ogg = yes ] ; then
1096#@@@ input_types="$input_types ogg"
1097#@@@fi
1098for input_type in $input_types ; do
Josh Coalsonc2751e62005-08-27 01:57:39 +00001099 echo "Testing multiple $input_type files without verify..."
1100 test_multifile $input_type flac no_sector_align ""
Josh Coalson463d0f82002-12-10 06:41:27 +00001101
Josh Coalsonc2751e62005-08-27 01:57:39 +00001102 echo "Testing multiple $input_type files with verify..."
1103 test_multifile $input_type flac no_sector_align "--verify"
Josh Coalson463d0f82002-12-10 06:41:27 +00001104
Josh Coalsonc28efe22006-11-04 03:04:21 +00001105 if [ $input_type != flac ] && [ $input_type != ogg ] ; then # --sector-align not supported for FLAC input
Josh Coalsonbfda3782006-08-28 03:42:10 +00001106 echo "Testing multiple $input_type files with --sector-align, without verify..."
1107 test_multifile $input_type flac sector_align ""
Josh Coalson463d0f82002-12-10 06:41:27 +00001108
Josh Coalsonbfda3782006-08-28 03:42:10 +00001109 echo "Testing multiple $input_type files with --sector-align, with verify..."
1110 test_multifile $input_type flac sector_align "--verify"
1111 fi
Josh Coalson463d0f82002-12-10 06:41:27 +00001112
Josh Coalsonc28efe22006-11-04 03:04:21 +00001113 if [ $has_ogg = yes ] ; then
Josh Coalsonc2751e62005-08-27 01:57:39 +00001114 echo "Testing multiple $input_type files with --ogg, without verify..."
1115 test_multifile $input_type ogg no_sector_align ""
Josh Coalson463d0f82002-12-10 06:41:27 +00001116
Josh Coalsonc2751e62005-08-27 01:57:39 +00001117 echo "Testing multiple $input_type files with --ogg, with verify..."
1118 test_multifile $input_type ogg no_sector_align "--verify"
Josh Coalson463d0f82002-12-10 06:41:27 +00001119
Josh Coalsonbfda3782006-08-28 03:42:10 +00001120 if [ $input_type != flac ] ; then # --sector-align not supported for FLAC input
1121 echo "Testing multiple $input_type files with --ogg and --sector-align, without verify..."
1122 test_multifile $input_type ogg sector_align ""
Josh Coalson463d0f82002-12-10 06:41:27 +00001123
Josh Coalsonbfda3782006-08-28 03:42:10 +00001124 echo "Testing multiple $input_type files with --ogg and --sector-align, with verify..."
1125 test_multifile $input_type ogg sector_align "--verify"
1126 fi
Josh Coalson463d0f82002-12-10 06:41:27 +00001127
Josh Coalsonc2751e62005-08-27 01:57:39 +00001128 echo "Testing multiple $input_type files with --ogg and --serial-number, with verify..."
1129 test_multifile $input_type ogg no_sector_align "--serial-number=321 --verify"
1130 fi
1131done
Josh Coalsonbfda3782006-08-28 03:42:10 +00001132
1133
1134############################################################################
Josh Coalson7617cac2008-09-09 07:24:23 +00001135# test --keep-foreign-metadata
1136############################################################################
1137
1138echo "Testing --keep-foreign-metadata..."
1139
1140rt_test_wav wacky1.wav '--keep-foreign-metadata'
1141rt_test_wav wacky2.wav '--keep-foreign-metadata'
Josh Coalsond7f53442008-09-09 07:49:19 +00001142rt_test_w64 wacky1.w64 '--keep-foreign-metadata'
1143rt_test_w64 wacky2.w64 '--keep-foreign-metadata'
Josh Coalson7617cac2008-09-09 07:24:23 +00001144rt_test_rf64 wacky1.rf64 '--keep-foreign-metadata'
1145rt_test_rf64 wacky2.rf64 '--keep-foreign-metadata'
1146
1147
1148############################################################################
Josh Coalsonbfda3782006-08-28 03:42:10 +00001149# test the metadata-handling properties of flac-to-flac encoding
1150############################################################################
1151
1152echo "Testing the metadata-handling properties of flac-to-flac encoding..."
1153
Erik de Castro Lopod8036ea2015-02-15 16:32:25 +11001154testdatadir=${top_srcdir}/test/flac-to-flac-metadata-test-files
1155
Josh Coalsonbfda3782006-08-28 03:42:10 +00001156filter ()
1157{
Josh Coalsona5023532007-02-04 04:28:37 +00001158 # minor danger, changing vendor strings might change the length of the
Josh Coalsonbfda3782006-08-28 03:42:10 +00001159 # VORBIS_COMMENT block, but if we add "^ length: " to the patterns,
1160 # we lose info about PADDING size that we need
1161 grep -Ev '^ vendor string: |^ m..imum .....size: ' | sed -e 's/, stream_offset.*//'
1162}
1163flac2flac ()
1164{
Erik de Castro Lopod8036ea2015-02-15 16:32:25 +11001165 file="$testdatadir/$1"
1166 case="$testdatadir/$2"
Josh Coalsonbfda3782006-08-28 03:42:10 +00001167 args="$3"
1168 expect="$case-expect.meta"
Erik de Castro Lopod8036ea2015-02-15 16:32:25 +11001169 echo -n "$2... "
Erik de Castro Lopo1ddeb262015-02-24 18:04:44 +11001170 # The 'make distcheck' target needs this.
1171 chmod u+w $file
Erik de Castro Lopobb2abea2015-02-13 19:47:30 +11001172 run_flac -f -o out.flac $args $file || die "ERROR encoding FLAC file"
Josh Coalsonbfda3782006-08-28 03:42:10 +00001173 run_metaflac --list out.flac | filter > out.meta || die "ERROR listing metadata of output FLAC file"
1174 diff -q -w $expect out.meta 2>/dev/null || die "ERROR: metadata does not match expected $expect"
1175 echo OK
1176}
1177
1178#filter=', stream_offset.*|^ vendor string: |^ length: |^ m..imum .....size: '
Josh Coalsonbfda3782006-08-28 03:42:10 +00001179
1180# case 00a: no alterations on a file with all metadata types, keep all metadata, in same order
1181flac2flac input-SCVAUP.flac case00a ""
1182# case 01a: on file with multiple PADDING blocks, they should be aggregated into one at the end
1183flac2flac input-SCVPAP.flac case01a ""
1184# case 01b: on file with multiple PADDING blocks and --no-padding specified, they should all be deleted
1185flac2flac input-SCVPAP.flac case01b "--no-padding"
1186# case 01c: on file with multiple PADDING blocks and -P specified, they should all be overwritten with -P value
1187flac2flac input-SCVPAP.flac case01c "-P 1234"
1188# case 01d: on file with no PADDING blocks, use -P setting
1189flac2flac input-SCVA.flac case01d "-P 1234"
1190# case 01e: on file with no PADDING blocks and no -P given, use default padding
1191flac2flac input-SCVA.flac case01e ""
1192# case 02a: on file with no VORBIS_COMMENT block, add new VORBIS_COMMENT
1193flac2flac input-SCPAP.flac case02a ""
1194# case 02b: on file with no VORBIS_COMMENT block and --tag, add new VORBIS_COMMENT with tags
1195flac2flac input-SCPAP.flac case02b "--tag=artist=0"
1196# case 02c: on file with VORBIS_COMMENT block and --tag, replace existing VORBIS_COMMENT with new tags
Erik de Castro Lopobb2abea2015-02-13 19:47:30 +11001197flac2flac input-SCVAUP.flac case02c "--tag=artist=0"
Josh Coalsonbfda3782006-08-28 03:42:10 +00001198# case 03a: on file with no CUESHEET block and --cuesheet specified, add it
Erik de Castro Lopod8036ea2015-02-15 16:32:25 +11001199flac2flac input-SVAUP.flac case03a "--cuesheet=$testdatadir/input0.cue"
Josh Coalsonbfda3782006-08-28 03:42:10 +00001200# case 03b: on file with CUESHEET block and --cuesheet specified, overwrite existing CUESHEET
Erik de Castro Lopod8036ea2015-02-15 16:32:25 +11001201flac2flac input-SCVAUP.flac case03b "--cuesheet=$testdatadir/input0.cue"
Josh Coalsonbfda3782006-08-28 03:42:10 +00001202# case 03c: on file with CUESHEET block and size-changing option specified, drop existing CUESHEET
Erik de Castro Lopobb2abea2015-02-13 19:47:30 +11001203flac2flac input-SCVAUP.flac case03c "--skip=1"
Josh Coalsonbfda3782006-08-28 03:42:10 +00001204# case 04a: on file with no SEEKTABLE block and --no-seektable specified, no SEEKTABLE
1205flac2flac input-VA.flac case04a "--no-padding --no-seektable"
1206# case 04b: on file with no SEEKTABLE block and -S specified, new SEEKTABLE
1207flac2flac input-VA.flac case04b "--no-padding -S 5x"
1208# case 04c: on file with no SEEKTABLE block and no seektable options specified, new SEEKTABLE with default points
1209flac2flac input-VA.flac case04c "--no-padding"
1210# case 04d: on file with SEEKTABLE block and --no-seektable specified, drop existing SEEKTABLE
1211flac2flac input-SCVA.flac case04d "--no-padding --no-seektable"
1212# case 04e: on file with SEEKTABLE block and -S specified, overwrite existing SEEKTABLE
Erik de Castro Lopobb2abea2015-02-13 19:47:30 +11001213flac2flac input-SCVA.flac case04e "--no-padding -S 5x"
Josh Coalsonbfda3782006-08-28 03:42:10 +00001214# case 04f: on file with SEEKTABLE block and size-changing option specified, drop existing SEEKTABLE, new SEEKTABLE with default points
1215#(already covered by case03c)
1216
1217rm -f out.flac out.meta
1218
Josh Coalsonc28efe22006-11-04 03:04:21 +00001219#@@@ when metaflac handles ogg flac, duplicate flac2flac tests here
1220
Josh Coalsonbfda3782006-08-28 03:42:10 +00001221cd ..