PageRenderTime 2956ms CodeModel.GetById 2ms RepoModel.GetById 7ms app.codeStats 1ms

/trunk/libs/libflac/flac-1.3.2/test/test_flac.sh

https://gitlab.com/thanhnhat041/padavan-ng
Shell | 1155 lines | 857 code | 169 blank | 129 comment | 361 complexity | 09d319dee5dcd3a02fb72df86fa2b553 MD5 | raw file
  1. #!/bin/sh -e
  2. # FLAC - Free Lossless Audio Codec
  3. # Copyright (C) 2001-2009 Josh Coalson
  4. # Copyright (C) 2011-2016 Xiph.Org Foundation
  5. #
  6. # This file is part the FLAC project. FLAC is comprised of several
  7. # components distributed under different licenses. The codec libraries
  8. # are distributed under Xiph.Org's BSD-like license (see the file
  9. # COPYING.Xiph in this distribution). All other programs, libraries, and
  10. # plugins are distributed under the GPL (see COPYING.GPL). The documentation
  11. # is distributed under the Gnu FDL (see COPYING.FDL). Each file in the
  12. # FLAC distribution contains at the top the terms under which it may be
  13. # distributed.
  14. #
  15. # Since this particular file is relevant to all components of FLAC,
  16. # it may be distributed under the Xiph.Org license, which is the least
  17. # restrictive of those mentioned above. See the file COPYING.Xiph in this
  18. # distribution.
  19. . ./common.sh
  20. # we use '.' as decimal separator in --skip/--until tests
  21. export LANG=C LC_ALL=C
  22. dddie="die ERROR: creating files with dd"
  23. PATH=`pwd`/../src/flac:$PATH
  24. PATH=`pwd`/../src/metaflac:$PATH
  25. PATH=`pwd`/../src/test_streams:$PATH
  26. PATH=`pwd`/../objs/$BUILD/bin:$PATH
  27. flac${EXE} --help 1>/dev/null 2>/dev/null || die "ERROR can't find flac executable"
  28. run_flac ()
  29. {
  30. if [ x"$FLAC__TEST_WITH_VALGRIND" = xyes ] ; then
  31. echo "valgrind --leak-check=yes --show-reachable=yes --num-callers=50 flac $*" >>test_flac.valgrind.log
  32. 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
  33. else
  34. flac${EXE} $TOTALLY_SILENT --no-error-on-compression-fail $*
  35. fi
  36. }
  37. run_metaflac ()
  38. {
  39. if [ x"$FLAC__TEST_WITH_VALGRIND" = xyes ] ; then
  40. echo "valgrind --leak-check=yes --show-reachable=yes --num-callers=50 metaflac $*" >>test_flac.valgrind.log
  41. valgrind --leak-check=yes --show-reachable=yes --num-callers=50 --log-fd=4 metaflac${EXE} $* 4>>test_flac.valgrind.log
  42. else
  43. metaflac${EXE} $*
  44. fi
  45. }
  46. md5cmp ()
  47. {
  48. n=`( [ -f "$1" ] && [ -f "$2" ] && metaflac${EXE} --show-md5sum --no-filename "$1" "$2" 2>/dev/null || exit 1 ) | uniq | wc -l`
  49. [ "$n" != "" ] && [ $n = 1 ]
  50. }
  51. echo "Checking for --ogg support in flac..."
  52. if 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
  53. has_ogg=yes;
  54. echo "flac --ogg works"
  55. else
  56. has_ogg=no;
  57. echo "flac --ogg doesn't work"
  58. fi
  59. echo "Generating streams..."
  60. if [ ! -f wacky1.wav ] ; then
  61. test_streams || die "ERROR during test_streams"
  62. fi
  63. ############################################################################
  64. # test that flac doesn't automatically overwrite files unless -f is used
  65. ############################################################################
  66. echo "Try encoding to a file that exists; should fail"
  67. cp wacky1.wav exist.wav
  68. touch exist.flac
  69. if run_flac -0 exist.wav ; then
  70. die "ERROR: it should have failed but didn't"
  71. else
  72. echo "OK, it failed as it should"
  73. fi
  74. echo "Try encoding with -f to a file that exists; should succeed"
  75. if run_flac -0 --force exist.wav ; then
  76. echo "OK, it succeeded as it should"
  77. else
  78. die "ERROR: it should have succeeded but didn't"
  79. fi
  80. echo "Try decoding to a file that exists; should fail"
  81. if run_flac -d exist.flac ; then
  82. die "ERROR: it should have failed but didn't"
  83. else
  84. echo "OK, it failed as it should"
  85. fi
  86. echo "Try decoding with -f to a file that exists; should succeed"
  87. if run_flac -d -f exist.flac ; then
  88. echo "OK, it succeeded as it should"
  89. else
  90. die "ERROR: it should have succeeded but didn't"
  91. fi
  92. rm -f exist.wav exist.flac
  93. ############################################################################
  94. # test fractional block sizes
  95. ############################################################################
  96. test_fractional ()
  97. {
  98. blocksize=$1
  99. samples=$2
  100. dd if=noise.raw ibs=4 count=$samples of=pbs.raw 2>/dev/null || $dddie
  101. echo $ECHO_N "fractional block size test (blocksize=$blocksize samples=$samples) encode... " $ECHO_C
  102. 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"
  103. echo $ECHO_N "decode... " $ECHO_C
  104. run_flac --force --decode --force-raw-format --endian=little --sign=signed -o pbs.cmp pbs.flac || die "ERROR"
  105. echo $ECHO_N "compare... " $ECHO_C
  106. cmp pbs.raw pbs.cmp || die "ERROR: file mismatch"
  107. echo "OK"
  108. rm -f pbs.raw pbs.flac pbs.cmp
  109. }
  110. # The special significance of 2048 is it's the # of samples that flac calls
  111. # FLAC__stream_encoder_process() on.
  112. #
  113. # We're trying to make sure the 1-sample overread logic in the stream encoder
  114. # (used for last-block checking) works; these values probe around common
  115. # multiples of the flac sample chunk size (2048) and the blocksize.
  116. for samples in 31 32 33 34 35 2046 2047 2048 2049 2050 ; do
  117. test_fractional 33 $samples
  118. done
  119. for 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
  120. test_fractional 256 $samples
  121. done
  122. for samples in 1022 1023 1024 1025 1026 2046 2047 2048 2049 2050 4094 4095 4096 4097 4098 ; do
  123. test_fractional 2048 $samples
  124. done
  125. for 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
  126. test_fractional 4608 $samples
  127. done
  128. ############################################################################
  129. # basic 'round-trip' tests of various kinds of streams
  130. ############################################################################
  131. rt_test_raw ()
  132. {
  133. f="$1"
  134. extra="$2"
  135. channels=`echo $f | awk -F- '{print $2}'`
  136. bps=`echo $f | awk -F- '{print $3}'`
  137. sign=`echo $f | awk -F- '{print $4}'`
  138. echo $ECHO_N "round-trip test ($f) encode... " $ECHO_C
  139. 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"
  140. echo $ECHO_N "decode... " $ECHO_C
  141. run_flac --force --decode --force-raw-format --endian=little --sign=$sign -o rt.raw $extra rt.flac || die "ERROR"
  142. echo $ECHO_N "compare... " $ECHO_C
  143. cmp $f rt.raw || die "ERROR: file mismatch"
  144. echo "OK"
  145. rm -f rt.flac rt.raw
  146. }
  147. rt_test_wav ()
  148. {
  149. f="$1"
  150. extra="$2"
  151. echo $ECHO_N "round-trip test ($f) encode... " $ECHO_C
  152. run_flac --force --verify --channel-map=none --no-padding --lax -o rt.flac $extra $f || die "ERROR"
  153. echo $ECHO_N "decode... " $ECHO_C
  154. run_flac --force --decode --channel-map=none -o rt.wav $extra rt.flac || die "ERROR"
  155. echo $ECHO_N "compare... " $ECHO_C
  156. cmp $f rt.wav || die "ERROR: file mismatch"
  157. echo "OK"
  158. rm -f rt.flac rt.wav
  159. }
  160. rt_test_w64 ()
  161. {
  162. f="$1"
  163. extra="$2"
  164. echo $ECHO_N "round-trip test ($f) encode... " $ECHO_C
  165. run_flac --force --verify --channel-map=none --no-padding --lax -o rt.flac $extra $f || die "ERROR"
  166. echo $ECHO_N "decode... " $ECHO_C
  167. run_flac --force --decode --channel-map=none -o rt.w64 $extra rt.flac || die "ERROR"
  168. echo $ECHO_N "compare... " $ECHO_C
  169. cmp $f rt.w64 || die "ERROR: file mismatch"
  170. echo "OK"
  171. rm -f rt.flac rt.w64
  172. }
  173. rt_test_rf64 ()
  174. {
  175. f="$1"
  176. extra="$2"
  177. echo $ECHO_N "round-trip test ($f) encode... " $ECHO_C
  178. run_flac --force --verify --channel-map=none --no-padding --lax -o rt.flac $extra $f || die "ERROR"
  179. echo $ECHO_N "decode... " $ECHO_C
  180. run_flac --force --decode --channel-map=none -o rt.rf64 $extra rt.flac || die "ERROR"
  181. echo $ECHO_N "compare... " $ECHO_C
  182. cmp $f rt.rf64 || die "ERROR: file mismatch"
  183. echo "OK"
  184. rm -f rt.flac rt.rf64
  185. }
  186. rt_test_aiff ()
  187. {
  188. f="$1"
  189. extra="$2"
  190. echo $ECHO_N "round-trip test ($f) encode... " $ECHO_C
  191. run_flac --force --verify --channel-map=none --no-padding --lax -o rt.flac $extra $f || die "ERROR"
  192. echo $ECHO_N "decode... " $ECHO_C
  193. run_flac --force --decode --channel-map=none -o rt.aiff $extra rt.flac || die "ERROR"
  194. echo $ECHO_N "compare... " $ECHO_C
  195. cmp $f rt.aiff || die "ERROR: file mismatch"
  196. echo "OK"
  197. rm -f rt.flac rt.aiff
  198. }
  199. # assumes input file is WAVE; does not check the metadata-preserving features of flac-to-flac; that is checked later
  200. rt_test_flac ()
  201. {
  202. f="$1"
  203. extra="$2"
  204. echo $ECHO_N "round-trip test ($f->flac->flac->wav) encode... " $ECHO_C
  205. run_flac --force --verify --channel-map=none --no-padding --lax -o rt.flac $extra $f || die "ERROR"
  206. echo $ECHO_N "re-encode... " $ECHO_C
  207. run_flac --force --verify --lax -o rt2.flac rt.flac || die "ERROR"
  208. echo $ECHO_N "decode... " $ECHO_C
  209. run_flac --force --decode --channel-map=none -o rt.wav $extra rt2.flac || die "ERROR"
  210. echo $ECHO_N "compare... " $ECHO_C
  211. cmp $f rt.wav || die "ERROR: file mismatch"
  212. echo "OK"
  213. rm -f rt.wav rt.flac rt2.flac
  214. }
  215. # assumes input file is WAVE; does not check the metadata-preserving features of flac-to-flac; that is checked later
  216. rt_test_ogg_flac ()
  217. {
  218. f="$1"
  219. extra="$2"
  220. echo $ECHO_N "round-trip test ($f->oggflac->oggflac->wav) encode... " $ECHO_C
  221. run_flac --force --verify --channel-map=none --no-padding --lax -o rt.oga --ogg $extra $f || die "ERROR"
  222. echo $ECHO_N "re-encode... " $ECHO_C
  223. run_flac --force --verify --lax -o rt2.oga --ogg rt.oga || die "ERROR"
  224. echo $ECHO_N "decode... " $ECHO_C
  225. run_flac --force --decode --channel-map=none -o rt.wav $extra rt2.oga || die "ERROR"
  226. echo $ECHO_N "compare... " $ECHO_C
  227. cmp $f rt.wav || die "ERROR: file mismatch"
  228. echo "OK"
  229. rm -f rt.wav rt.oga rt2.oga
  230. }
  231. for f in rt-*.raw ; do
  232. rt_test_raw $f
  233. done
  234. for f in rt-*.wav ; do
  235. rt_test_wav $f
  236. done
  237. for f in rt-*.w64 ; do
  238. rt_test_w64 $f
  239. done
  240. for f in rt-*.rf64 ; do
  241. rt_test_rf64 $f
  242. done
  243. for f in rt-*.aiff ; do
  244. rt_test_aiff $f
  245. done
  246. for f in rt-*.wav ; do
  247. rt_test_flac $f
  248. done
  249. if [ $has_ogg = yes ] ; then
  250. for f in rt-*.wav ; do
  251. rt_test_ogg_flac $f
  252. done
  253. fi
  254. ############################################################################
  255. # test --skip and --until
  256. ############################################################################
  257. #
  258. # first make some chopped-up raw files
  259. #
  260. echo "abcdefghijklmnopqrstuvwxyz1234567890ABCDEFGHIJKLMN" > master.raw
  261. dd if=master.raw ibs=1 count=50 of=50c.raw 2>/dev/null || $dddie
  262. dd if=master.raw ibs=1 skip=10 count=40 of=50c.skip10.raw 2>/dev/null || $dddie
  263. dd if=master.raw ibs=1 skip=11 count=39 of=50c.skip11.raw 2>/dev/null || $dddie
  264. dd if=master.raw ibs=1 skip=20 count=30 of=50c.skip20.raw 2>/dev/null || $dddie
  265. dd if=master.raw ibs=1 skip=30 count=20 of=50c.skip30.raw 2>/dev/null || $dddie
  266. dd if=master.raw ibs=1 skip=40 count=10 of=50c.skip40.raw 2>/dev/null || $dddie
  267. dd if=master.raw ibs=1 count=10 of=50c.until10.raw 2>/dev/null || $dddie
  268. dd if=master.raw ibs=1 count=20 of=50c.until20.raw 2>/dev/null || $dddie
  269. dd if=master.raw ibs=1 count=30 of=50c.until30.raw 2>/dev/null || $dddie
  270. dd if=master.raw ibs=1 count=39 of=50c.until39.raw 2>/dev/null || $dddie
  271. dd if=master.raw ibs=1 count=40 of=50c.until40.raw 2>/dev/null || $dddie
  272. dd if=master.raw ibs=1 skip=10 count=20 of=50c.skip10.until30.raw 2>/dev/null || $dddie
  273. dd if=master.raw ibs=1 skip=10 count=29 of=50c.skip10.until39.raw 2>/dev/null || $dddie
  274. dd if=master.raw ibs=1 skip=10 count=30 of=50c.skip10.until40.raw 2>/dev/null || $dddie
  275. dd if=master.raw ibs=1 skip=20 count=10 of=50c.skip20.until30.raw 2>/dev/null || $dddie
  276. dd if=master.raw ibs=1 skip=20 count=20 of=50c.skip20.until40.raw 2>/dev/null || $dddie
  277. wav_eopt="--force --verify --no-padding --lax"
  278. wav_dopt="--force --decode"
  279. raw_eopt="$wav_eopt --force-raw-format --endian=big --sign=signed --sample-rate=10 --bps=8 --channels=1"
  280. raw_dopt="$wav_dopt --force-raw-format --endian=big --sign=signed"
  281. #
  282. # convert them to WAVE/AIFF/Ogg FLAC files
  283. #
  284. convert_to_wav ()
  285. {
  286. run_flac "$2" $1.raw || die "ERROR converting $1.raw to WAVE"
  287. run_flac "$3" $1.flac || die "ERROR converting $1.raw to WAVE"
  288. }
  289. convert_to_wav 50c "$raw_eopt" "$wav_dopt"
  290. convert_to_wav 50c.skip10 "$raw_eopt" "$wav_dopt"
  291. convert_to_wav 50c.skip11 "$raw_eopt" "$wav_dopt"
  292. convert_to_wav 50c.skip20 "$raw_eopt" "$wav_dopt"
  293. convert_to_wav 50c.skip30 "$raw_eopt" "$wav_dopt"
  294. convert_to_wav 50c.skip40 "$raw_eopt" "$wav_dopt"
  295. convert_to_wav 50c.until10 "$raw_eopt" "$wav_dopt"
  296. convert_to_wav 50c.until20 "$raw_eopt" "$wav_dopt"
  297. convert_to_wav 50c.until30 "$raw_eopt" "$wav_dopt"
  298. convert_to_wav 50c.until39 "$raw_eopt" "$wav_dopt"
  299. convert_to_wav 50c.until40 "$raw_eopt" "$wav_dopt"
  300. convert_to_wav 50c.skip10.until30 "$raw_eopt" "$wav_dopt"
  301. convert_to_wav 50c.skip10.until39 "$raw_eopt" "$wav_dopt"
  302. convert_to_wav 50c.skip10.until40 "$raw_eopt" "$wav_dopt"
  303. convert_to_wav 50c.skip20.until30 "$raw_eopt" "$wav_dopt"
  304. convert_to_wav 50c.skip20.until40 "$raw_eopt" "$wav_dopt"
  305. convert_to_aiff ()
  306. {
  307. run_flac "$2" $1.raw || die "ERROR converting $1.raw to AIFF"
  308. run_flac "$3" $1.flac -o $1.aiff || die "ERROR converting $1.raw to AIFF"
  309. }
  310. convert_to_aiff 50c "$raw_eopt" "$wav_dopt"
  311. convert_to_aiff 50c.skip10 "$raw_eopt" "$wav_dopt"
  312. convert_to_aiff 50c.skip11 "$raw_eopt" "$wav_dopt"
  313. convert_to_aiff 50c.skip20 "$raw_eopt" "$wav_dopt"
  314. convert_to_aiff 50c.skip30 "$raw_eopt" "$wav_dopt"
  315. convert_to_aiff 50c.skip40 "$raw_eopt" "$wav_dopt"
  316. convert_to_aiff 50c.until10 "$raw_eopt" "$wav_dopt"
  317. convert_to_aiff 50c.until20 "$raw_eopt" "$wav_dopt"
  318. convert_to_aiff 50c.until30 "$raw_eopt" "$wav_dopt"
  319. convert_to_aiff 50c.until39 "$raw_eopt" "$wav_dopt"
  320. convert_to_aiff 50c.until40 "$raw_eopt" "$wav_dopt"
  321. convert_to_aiff 50c.skip10.until30 "$raw_eopt" "$wav_dopt"
  322. convert_to_aiff 50c.skip10.until39 "$raw_eopt" "$wav_dopt"
  323. convert_to_aiff 50c.skip10.until40 "$raw_eopt" "$wav_dopt"
  324. convert_to_aiff 50c.skip20.until30 "$raw_eopt" "$wav_dopt"
  325. convert_to_aiff 50c.skip20.until40 "$raw_eopt" "$wav_dopt"
  326. convert_to_ogg ()
  327. {
  328. run_flac "$wav_eopt" --ogg $1.wav || die "ERROR converting $1.raw to Ogg FLAC"
  329. }
  330. if [ $has_ogg = yes ] ; then
  331. convert_to_ogg 50c
  332. convert_to_ogg 50c.skip10
  333. convert_to_ogg 50c.skip11
  334. convert_to_ogg 50c.skip20
  335. convert_to_ogg 50c.skip30
  336. convert_to_ogg 50c.skip40
  337. convert_to_ogg 50c.until10
  338. convert_to_ogg 50c.until20
  339. convert_to_ogg 50c.until30
  340. convert_to_ogg 50c.until39
  341. convert_to_ogg 50c.until40
  342. convert_to_ogg 50c.skip10.until30
  343. convert_to_ogg 50c.skip10.until39
  344. convert_to_ogg 50c.skip10.until40
  345. convert_to_ogg 50c.skip20.until30
  346. convert_to_ogg 50c.skip20.until40
  347. fi
  348. test_skip_until ()
  349. {
  350. in_fmt=$1
  351. out_fmt=$2
  352. [ "$in_fmt" = wav ] || [ "$in_fmt" = aiff ] || [ "$in_fmt" = raw ] || [ "$in_fmt" = flac ] || [ "$in_fmt" = ogg ] || die "ERROR: internal error, bad 'in' format '$in_fmt'"
  353. [ "$out_fmt" = flac ] || [ "$out_fmt" = ogg ] || die "ERROR: internal error, bad 'out' format '$out_fmt'"
  354. if [ $in_fmt = raw ] ; then
  355. eopt="$raw_eopt"
  356. dopt="$raw_dopt"
  357. else
  358. eopt="$wav_eopt"
  359. dopt="$wav_dopt"
  360. fi
  361. if ( [ $in_fmt = flac ] || [ $in_fmt = ogg ] ) && ( [ $out_fmt = flac ] || [ $out_fmt = ogg ] ) ; then
  362. CMP=md5cmp
  363. else
  364. CMP=cmp
  365. fi
  366. if [ $out_fmt = ogg ] ; then
  367. eopt="--ogg $eopt"
  368. fi
  369. #
  370. # test --skip when encoding
  371. #
  372. desc="($in_fmt<->$out_fmt)"
  373. echo $ECHO_N "testing --skip=# (encode) $desc... " $ECHO_C
  374. run_flac $eopt --skip=10 -o z50c.skip10.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
  375. [ $in_fmt = $out_fmt ] || run_flac $dopt -o z50c.skip10.$in_fmt z50c.skip10.$out_fmt || die "ERROR decoding FLAC file $desc"
  376. $CMP 50c.skip10.$in_fmt z50c.skip10.$in_fmt || die "ERROR: file mismatch for --skip=10 (encode) $desc"
  377. rm -f z50c.skip10.$out_fmt z50c.skip10.$in_fmt
  378. echo OK
  379. echo $ECHO_N "testing --skip=mm:ss (encode) $desc... " $ECHO_C
  380. run_flac $eopt --skip=0:01 -o z50c.skip0_01.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
  381. [ $in_fmt = $out_fmt ] || run_flac $dopt -o z50c.skip0_01.$in_fmt z50c.skip0_01.$out_fmt || die "ERROR decoding FLAC file $desc"
  382. $CMP 50c.skip10.$in_fmt z50c.skip0_01.$in_fmt || die "ERROR: file mismatch for --skip=0:01 (encode) $desc"
  383. rm -f z50c.skip0_01.$out_fmt z50c.skip0_01.$in_fmt
  384. echo OK
  385. echo $ECHO_N "testing --skip=mm:ss.sss (encode) $desc... " $ECHO_C
  386. run_flac $eopt --skip=0:01.1001 -o z50c.skip0_01.1001.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
  387. [ $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"
  388. $CMP 50c.skip11.$in_fmt z50c.skip0_01.1001.$in_fmt || die "ERROR: file mismatch for --skip=0:01.1001 (encode) $desc"
  389. rm -f z50c.skip0_01.1001.$out_fmt z50c.skip0_01.1001.$in_fmt
  390. echo OK
  391. #
  392. # test --skip when decoding
  393. #
  394. 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"
  395. echo $ECHO_N "testing --skip=# (decode) $desc... " $ECHO_C
  396. run_flac $dopt --skip=10 -o z50c.skip10.$in_fmt z50c.$out_fmt || die "ERROR decoding FLAC file $desc"
  397. $CMP 50c.skip10.$in_fmt z50c.skip10.$in_fmt || die "ERROR: file mismatch for --skip=10 (decode) $desc"
  398. rm -f z50c.skip10.$in_fmt
  399. echo OK
  400. echo $ECHO_N "testing --skip=mm:ss (decode) $desc... " $ECHO_C
  401. run_flac $dopt --skip=0:01 -o z50c.skip0_01.$in_fmt z50c.$out_fmt || die "ERROR decoding FLAC file $desc"
  402. $CMP 50c.skip10.$in_fmt z50c.skip0_01.$in_fmt || die "ERROR: file mismatch for --skip=0:01 (decode) $desc"
  403. rm -f z50c.skip0_01.$in_fmt
  404. echo OK
  405. echo $ECHO_N "testing --skip=mm:ss.sss (decode) $desc... " $ECHO_C
  406. run_flac $dopt --skip=0:01.1001 -o z50c.skip0_01.1001.$in_fmt z50c.$out_fmt || die "ERROR decoding FLAC file $desc"
  407. $CMP 50c.skip11.$in_fmt z50c.skip0_01.1001.$in_fmt || die "ERROR: file mismatch for --skip=0:01.1001 (decode) $desc"
  408. rm -f z50c.skip0_01.1001.$in_fmt
  409. echo OK
  410. rm -f z50c.$out_fmt
  411. #
  412. # test --until when encoding
  413. #
  414. echo $ECHO_N "testing --until=# (encode) $desc... " $ECHO_C
  415. run_flac $eopt --until=40 -o z50c.until40.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
  416. [ $in_fmt = $out_fmt ] || run_flac $dopt -o z50c.until40.$in_fmt z50c.until40.$out_fmt || die "ERROR decoding FLAC file $desc"
  417. $CMP 50c.until40.$in_fmt z50c.until40.$in_fmt || die "ERROR: file mismatch for --until=40 (encode) $desc"
  418. rm -f z50c.until40.$out_fmt z50c.until40.$in_fmt
  419. echo OK
  420. echo $ECHO_N "testing --until=mm:ss (encode) $desc... " $ECHO_C
  421. run_flac $eopt --until=0:04 -o z50c.until0_04.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
  422. [ $in_fmt = $out_fmt ] || run_flac $dopt -o z50c.until0_04.$in_fmt z50c.until0_04.$out_fmt || die "ERROR decoding FLAC file $desc"
  423. $CMP 50c.until40.$in_fmt z50c.until0_04.$in_fmt || die "ERROR: file mismatch for --until=0:04 (encode) $desc"
  424. rm -f z50c.until0_04.$out_fmt z50c.until0_04.$in_fmt
  425. echo OK
  426. echo $ECHO_N "testing --until=mm:ss.sss (encode) $desc... " $ECHO_C
  427. run_flac $eopt --until=0:03.9001 -o z50c.until0_03.9001.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
  428. [ $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"
  429. $CMP 50c.until39.$in_fmt z50c.until0_03.9001.$in_fmt || die "ERROR: file mismatch for --until=0:03.9001 (encode) $desc"
  430. rm -f z50c.until0_03.9001.$out_fmt z50c.until0_03.9001.$in_fmt
  431. echo OK
  432. echo $ECHO_N "testing --until=-# (encode) $desc... " $ECHO_C
  433. run_flac $eopt --until=-10 -o z50c.until-10.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
  434. [ $in_fmt = $out_fmt ] || run_flac $dopt -o z50c.until-10.$in_fmt z50c.until-10.$out_fmt || die "ERROR decoding FLAC file $desc"
  435. $CMP 50c.until40.$in_fmt z50c.until-10.$in_fmt || die "ERROR: file mismatch for --until=-10 (encode) $desc"
  436. rm -f z50c.until-10.$out_fmt z50c.until-10.$in_fmt
  437. echo OK
  438. echo $ECHO_N "testing --until=-mm:ss (encode) $desc... " $ECHO_C
  439. run_flac $eopt --until=-0:01 -o z50c.until-0_01.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
  440. [ $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"
  441. $CMP 50c.until40.$in_fmt z50c.until-0_01.$in_fmt || die "ERROR: file mismatch for --until=-0:01 (encode) $desc"
  442. rm -f z50c.until-0_01.$out_fmt z50c.until-0_01.$in_fmt
  443. echo OK
  444. echo $ECHO_N "testing --until=-mm:ss.sss (encode) $desc... " $ECHO_C
  445. run_flac $eopt --until=-0:01.1001 -o z50c.until-0_01.1001.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
  446. [ $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"
  447. $CMP 50c.until39.$in_fmt z50c.until-0_01.1001.$in_fmt || die "ERROR: file mismatch for --until=-0:01.1001 (encode) $desc"
  448. rm -f z50c.until-0_01.1001.$out_fmt z50c.until-0_01.1001.$in_fmt
  449. echo OK
  450. #
  451. # test --until when decoding
  452. #
  453. 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"
  454. echo $ECHO_N "testing --until=# (decode) $desc... " $ECHO_C
  455. run_flac $dopt --until=40 -o z50c.until40.$in_fmt z50c.$out_fmt || die "ERROR decoding FLAC file $desc"
  456. $CMP 50c.until40.$in_fmt z50c.until40.$in_fmt || die "ERROR: file mismatch for --until=40 (decode) $desc"
  457. rm -f z50c.until40.$in_fmt
  458. echo OK
  459. echo $ECHO_N "testing --until=mm:ss (decode) $desc... " $ECHO_C
  460. run_flac $dopt --until=0:04 -o z50c.until0_04.$in_fmt z50c.$out_fmt || die "ERROR decoding FLAC file $desc"
  461. $CMP 50c.until40.$in_fmt z50c.until0_04.$in_fmt || die "ERROR: file mismatch for --until=0:04 (decode) $desc"
  462. rm -f z50c.until0_04.$in_fmt
  463. echo OK
  464. echo $ECHO_N "testing --until=mm:ss.sss (decode) $desc... " $ECHO_C
  465. run_flac $dopt --until=0:03.9001 -o z50c.until0_03.9001.$in_fmt z50c.$out_fmt || die "ERROR decoding FLAC file $desc"
  466. $CMP 50c.until39.$in_fmt z50c.until0_03.9001.$in_fmt || die "ERROR: file mismatch for --until=0:03.9001 (decode) $desc"
  467. rm -f z50c.until0_03.9001.$in_fmt
  468. echo OK
  469. echo $ECHO_N "testing --until=-# (decode) $desc... " $ECHO_C
  470. run_flac $dopt --until=-10 -o z50c.until-10.$in_fmt z50c.$out_fmt || die "ERROR decoding FLAC file $desc"
  471. $CMP 50c.until40.$in_fmt z50c.until-10.$in_fmt || die "ERROR: file mismatch for --until=-10 (decode) $desc"
  472. rm -f z50c.until-10.$in_fmt
  473. echo OK
  474. echo $ECHO_N "testing --until=-mm:ss (decode) $desc... " $ECHO_C
  475. run_flac $dopt --until=-0:01 -o z50c.until-0_01.$in_fmt z50c.$out_fmt || die "ERROR decoding FLAC file $desc"
  476. $CMP 50c.until40.$in_fmt z50c.until-0_01.$in_fmt || die "ERROR: file mismatch for --until=-0:01 (decode) $desc"
  477. rm -f z50c.until-0_01.$in_fmt
  478. echo OK
  479. echo $ECHO_N "testing --until=-mm:ss.sss (decode) $desc... " $ECHO_C
  480. run_flac $dopt --until=-0:01.1001 -o z50c.until-0_01.1001.$in_fmt z50c.$out_fmt || die "ERROR decoding FLAC file $desc"
  481. $CMP 50c.until39.$in_fmt z50c.until-0_01.1001.$in_fmt || die "ERROR: file mismatch for --until=-0:01.1001 (decode) $desc"
  482. rm -f z50c.until-0_01.1001.$in_fmt
  483. echo OK
  484. rm -f z50c.$out_fmt
  485. #
  486. # test --skip and --until when encoding
  487. #
  488. echo $ECHO_N "testing --skip=10 --until=# (encode) $desc... " $ECHO_C
  489. run_flac $eopt --skip=10 --until=40 -o z50c.skip10.until40.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
  490. [ $in_fmt = $out_fmt ] || run_flac $dopt -o z50c.skip10.until40.$in_fmt z50c.skip10.until40.$out_fmt || die "ERROR decoding FLAC file $desc"
  491. $CMP 50c.skip10.until40.$in_fmt z50c.skip10.until40.$in_fmt || die "ERROR: file mismatch for --skip=10 --until=40 (encode) $desc"
  492. rm -f z50c.skip10.until40.$out_fmt z50c.skip10.until40.$in_fmt
  493. echo OK
  494. echo $ECHO_N "testing --skip=10 --until=mm:ss (encode) $desc... " $ECHO_C
  495. run_flac $eopt --skip=10 --until=0:04 -o z50c.skip10.until0_04.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
  496. [ $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"
  497. $CMP 50c.skip10.until40.$in_fmt z50c.skip10.until0_04.$in_fmt || die "ERROR: file mismatch for --skip=10 --until=0:04 (encode) $desc"
  498. rm -f z50c.skip10.until0_04.$out_fmt z50c.skip10.until0_04.$in_fmt
  499. echo OK
  500. echo $ECHO_N "testing --skip=10 --until=mm:ss.sss (encode) $desc... " $ECHO_C
  501. 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"
  502. [ $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"
  503. $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"
  504. rm -f z50c.skip10.until0_03.9001.$out_fmt z50c.skip10.until0_03.9001.$in_fmt
  505. echo OK
  506. echo $ECHO_N "testing --skip=10 --until=+# (encode) $desc... " $ECHO_C
  507. run_flac $eopt --skip=10 --until=+30 -o z50c.skip10.until+30.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
  508. [ $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"
  509. $CMP 50c.skip10.until40.$in_fmt z50c.skip10.until+30.$in_fmt || die "ERROR: file mismatch for --skip=10 --until=+30 (encode) $desc"
  510. rm -f z50c.skip10.until+30.$out_fmt z50c.skip10.until+30.$in_fmt
  511. echo OK
  512. echo $ECHO_N "testing --skip=10 --until=+mm:ss (encode) $desc... " $ECHO_C
  513. 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"
  514. [ $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"
  515. $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"
  516. rm -f z50c.skip10.until+0_03.$out_fmt z50c.skip10.until+0_03.$in_fmt
  517. echo OK
  518. echo $ECHO_N "testing --skip=10 --until=+mm:ss.sss (encode) $desc... " $ECHO_C
  519. 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"
  520. [ $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"
  521. $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"
  522. rm -f z50c.skip10.until+0_02.9001.$out_fmt z50c.skip10.until+0_02.9001.$in_fmt
  523. echo OK
  524. echo $ECHO_N "testing --skip=10 --until=-# (encode) $desc... " $ECHO_C
  525. run_flac $eopt --skip=10 --until=-10 -o z50c.skip10.until-10.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
  526. [ $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"
  527. $CMP 50c.skip10.until40.$in_fmt z50c.skip10.until-10.$in_fmt || die "ERROR: file mismatch for --skip=10 --until=-10 (encode) $desc"
  528. rm -f z50c.skip10.until-10.$out_fmt z50c.skip10.until-10.$in_fmt
  529. echo OK
  530. echo $ECHO_N "testing --skip=10 --until=-mm:ss (encode) $desc... " $ECHO_C
  531. 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"
  532. [ $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"
  533. $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"
  534. rm -f z50c.skip10.until-0_01.$out_fmt z50c.skip10.until-0_01.$in_fmt
  535. echo OK
  536. echo $ECHO_N "testing --skip=10 --until=-mm:ss.sss (encode) $desc... " $ECHO_C
  537. 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"
  538. [ $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"
  539. $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"
  540. rm -f z50c.skip10.until-0_01.1001.$out_fmt z50c.skip10.until-0_01.1001.$in_fmt
  541. echo OK
  542. #
  543. # test --skip and --until when decoding
  544. #
  545. 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"
  546. echo $ECHO_N "testing --skip=10 --until=# (decode) $desc... " $ECHO_C
  547. run_flac $dopt --skip=10 --until=40 -o z50c.skip10.until40.$in_fmt z50c.$out_fmt || die "ERROR decoding FLAC file $desc"
  548. $CMP 50c.skip10.until40.$in_fmt z50c.skip10.until40.$in_fmt || die "ERROR: file mismatch for --skip=10 --until=40 (decode) $desc"
  549. rm -f z50c.skip10.until40.$in_fmt
  550. echo OK
  551. echo $ECHO_N "testing --skip=10 --until=mm:ss (decode) $desc... " $ECHO_C
  552. run_flac $dopt --skip=10 --until=0:04 -o z50c.skip10.until0_04.$in_fmt z50c.$out_fmt || die "ERROR decoding FLAC file $desc"
  553. $CMP 50c.skip10.until40.$in_fmt z50c.skip10.until0_04.$in_fmt || die "ERROR: file mismatch for --skip=10 --until=0:04 (decode) $desc"
  554. rm -f z50c.skip10.until0_04.$in_fmt
  555. echo OK
  556. echo $ECHO_N "testing --skip=10 --until=mm:ss.sss (decode) $desc... " $ECHO_C
  557. 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"
  558. $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"
  559. rm -f z50c.skip10.until0_03.9001.$in_fmt
  560. echo OK
  561. echo $ECHO_N "testing --skip=10 --until=-# (decode) $desc... " $ECHO_C
  562. run_flac $dopt --skip=10 --until=-10 -o z50c.skip10.until-10.$in_fmt z50c.$out_fmt || die "ERROR decoding FLAC file $desc"
  563. $CMP 50c.skip10.until40.$in_fmt z50c.skip10.until-10.$in_fmt || die "ERROR: file mismatch for --skip=10 --until=-10 (decode) $desc"
  564. rm -f z50c.skip10.until-10.$in_fmt
  565. echo OK
  566. echo $ECHO_N "testing --skip=10 --until=-mm:ss (decode) $desc... " $ECHO_C
  567. 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"
  568. $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"
  569. rm -f z50c.skip10.until-0_01.$in_fmt
  570. echo OK
  571. echo $ECHO_N "testing --skip=10 --until=-mm:ss.sss (decode) $desc... " $ECHO_C
  572. 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"
  573. $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"
  574. rm -f z50c.skip10.until-0_01.1001.$in_fmt
  575. echo OK
  576. rm -f z50c.$out_fmt
  577. }
  578. test_skip_until raw flac
  579. test_skip_until wav flac
  580. test_skip_until aiff flac
  581. test_skip_until flac flac
  582. #@@@if [ $has_ogg = yes ] ; then
  583. #@@@ #@@@ doesn't work yet because md5cmp doesn't work because metaflac doesn't work on ogg flac yet
  584. #@@@ test_skip_until ogg flac
  585. #@@@fi
  586. if [ $has_ogg = yes ] ; then
  587. test_skip_until raw ogg
  588. test_skip_until wav ogg
  589. test_skip_until aiff ogg
  590. #@@@ doesn't work yet because md5cmp doesn't work because metaflac doesn't work on ogg flac yet
  591. #@@@test_skip_until flac ogg
  592. #@@@test_skip_until ogg ogg
  593. fi
  594. echo "testing seek extremes:"
  595. run_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"
  596. if [ $is_win = no ] ; then
  597. total_noise_cdda_samples=`run_metaflac --show-total-samples noise.flac`
  598. [ $? = 0 ] || die "ERROR getting total sample count from noise.flac"
  599. else
  600. # some flavors of cygwin don't seem to treat the \x0d as a word
  601. # separator, so we hard code it. we'll just have to fix it later
  602. # if we change the way noise.flac is made.
  603. total_noise_cdda_samples=393216
  604. fi
  605. echo $ECHO_N "testing --skip=0... " $ECHO_C
  606. run_flac $wav_dopt --skip=0 -o z.wav noise.flac || die "ERROR decoding FLAC file noise.flac"
  607. echo OK
  608. for delta in 2 1 ; do
  609. n=`expr $total_noise_cdda_samples - $delta`
  610. echo $ECHO_N "testing --skip=$n... " $ECHO_C
  611. run_flac $wav_dopt --skip=$n -o z.wav noise.flac || die "ERROR decoding FLAC file noise.flac"
  612. echo OK
  613. done
  614. rm noise.flac z.wav
  615. ############################################################################
  616. # test --input-size
  617. ############################################################################
  618. #@@@ cat will not work on old cygwin, need to fix
  619. if [ $is_win = no ] ; then
  620. echo $ECHO_N "testing --input-size=50 --skip=10... " $ECHO_C
  621. cat 50c.raw | run_flac $raw_eopt --input-size=50 --skip=10 -o z50c.skip10.flac - || die "ERROR generating FLAC file"
  622. run_flac $raw_dopt -o z50c.skip10.raw z50c.skip10.flac || die "ERROR decoding FLAC file"
  623. cmp 50c.skip10.raw z50c.skip10.raw || die "ERROR: file mismatch for --input-size=50 --skip=10"
  624. rm -f z50c.skip10.raw z50c.skip10.flac
  625. echo OK
  626. fi
  627. ############################################################################
  628. # test --cue
  629. ############################################################################
  630. #
  631. # create the cue sheet
  632. #
  633. cuesheet=cuetest.cue
  634. cat > $cuesheet << EOF
  635. CATALOG 1234567890123
  636. FILE "blah" WAVE
  637. TRACK 01 AUDIO
  638. INDEX 01 0
  639. INDEX 02 10
  640. INDEX 03 20
  641. TRACK 02 AUDIO
  642. INDEX 01 30
  643. TRACK 04 AUDIO
  644. INDEX 01 40
  645. EOF
  646. test_cue ()
  647. {
  648. in_fmt=$1
  649. out_fmt=$2
  650. [ "$in_fmt" = wav ] || [ "$in_fmt" = aiff ] || [ "$in_fmt" = raw ] || [ "$in_fmt" = flac ] || [ "$in_fmt" = ogg ] || die "ERROR: internal error, bad 'in' format '$in_fmt'"
  651. [ "$out_fmt" = flac ] || [ "$out_fmt" = ogg ] || die "ERROR: internal error, bad 'out' format '$out_fmt'"
  652. if [ $in_fmt = raw ] ; then
  653. eopt="$raw_eopt"
  654. dopt="$raw_dopt"
  655. else
  656. eopt="$wav_eopt"
  657. dopt="$wav_dopt"
  658. fi
  659. if ( [ $in_fmt = flac ] || [ $in_fmt = ogg ] ) && ( [ $out_fmt = flac ] || [ $out_fmt = ogg ] ) ; then
  660. CMP=md5cmp
  661. else
  662. CMP=cmp
  663. fi
  664. if [ $out_fmt = ogg ] ; then
  665. eopt="--ogg $eopt"
  666. fi
  667. desc="($in_fmt<->$out_fmt)"
  668. #
  669. # for this we need just need just one FLAC file; --cue only works while decoding
  670. #
  671. run_flac $eopt --cuesheet=$cuesheet -o z50c.cue.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
  672. # To make it easy to translate from cue point to sample numbers, the
  673. # file has a sample rate of 10 Hz and a cuesheet like so:
  674. #
  675. # TRACK 01, INDEX 01 : 0:00.00 -> sample 0
  676. # TRACK 01, INDEX 02 : 0:01.00 -> sample 10
  677. # TRACK 01, INDEX 03 : 0:02.00 -> sample 20
  678. # TRACK 02, INDEX 01 : 0:03.00 -> sample 30
  679. # TRACK 04, INDEX 01 : 0:04.00 -> sample 40
  680. #
  681. echo $ECHO_N "testing --cue=- $desc... " $ECHO_C
  682. run_flac $dopt -o z50c.cued.$in_fmt --cue=- z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
  683. $CMP 50c.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=- $desc"
  684. rm -f z50c.cued.$in_fmt
  685. echo OK
  686. echo $ECHO_N "testing --cue=1.0 $desc... " $ECHO_C
  687. run_flac $dopt -o z50c.cued.$in_fmt --cue=1.0 z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
  688. $CMP 50c.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=1.0 $desc"
  689. rm -f z50c.cued.$in_fmt
  690. echo OK
  691. echo $ECHO_N "testing --cue=1.0- $desc... " $ECHO_C
  692. run_flac $dopt -o z50c.cued.$in_fmt --cue=1.0- z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
  693. $CMP 50c.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=1.0- $desc"
  694. rm -f z50c.cued.$in_fmt
  695. echo OK
  696. echo $ECHO_N "testing --cue=1.1 $desc... " $ECHO_C
  697. run_flac $dopt -o z50c.cued.$in_fmt --cue=1.1 z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
  698. $CMP 50c.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=1.1 $desc"
  699. rm -f z50c.cued.$in_fmt
  700. echo OK
  701. echo $ECHO_N "testing --cue=1.1- $desc... " $ECHO_C
  702. run_flac $dopt -o z50c.cued.$in_fmt --cue=1.1- z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
  703. $CMP 50c.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=1.1- $desc"
  704. rm -f z50c.cued.$in_fmt
  705. echo OK
  706. echo $ECHO_N "testing --cue=1.2 $desc... " $ECHO_C
  707. run_flac $dopt -o z50c.cued.$in_fmt --cue=1.2 z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
  708. $CMP 50c.skip10.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=1.2 $desc"
  709. rm -f z50c.cued.$in_fmt
  710. echo OK
  711. echo $ECHO_N "testing --cue=1.2- $desc... " $ECHO_C
  712. run_flac $dopt -o z50c.cued.$in_fmt --cue=1.2- z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
  713. $CMP 50c.skip10.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=1.2- $desc"
  714. rm -f z50c.cued.$in_fmt
  715. echo OK
  716. echo $ECHO_N "testing --cue=1.4 $desc... " $ECHO_C
  717. run_flac $dopt -o z50c.cued.$in_fmt --cue=1.4 z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
  718. $CMP 50c.skip20.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=1.4 $desc"
  719. rm -f z50c.cued.$in_fmt
  720. echo OK
  721. echo $ECHO_N "testing --cue=1.4- $desc... " $ECHO_C
  722. run_flac $dopt -o z50c.cued.$in_fmt --cue=1.4- z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
  723. $CMP 50c.skip20.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=1.4- $desc"
  724. rm -f z50c.cued.$in_fmt
  725. echo OK
  726. echo $ECHO_N "testing --cue=-5.0 $desc... " $ECHO_C
  727. run_flac $dopt -o z50c.cued.$in_fmt --cue=-5.0 z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
  728. $CMP 50c.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=-5.0 $desc"
  729. rm -f z50c.cued.$in_fmt
  730. echo OK
  731. echo $ECHO_N "testing --cue=-4.1 $desc... " $ECHO_C
  732. run_flac $dopt -o z50c.cued.$in_fmt --cue=-4.1 z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
  733. $CMP 50c.until40.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=-4.1 $desc"
  734. rm -f z50c.cued.$in_fmt
  735. echo OK
  736. echo $ECHO_N "testing --cue=-3.1 $desc... " $ECHO_C
  737. run_flac $dopt -o z50c.cued.$in_fmt --cue=-3.1 z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
  738. $CMP 50c.until40.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=-3.1 $desc"
  739. rm -f z50c.cued.$in_fmt
  740. echo OK
  741. echo $ECHO_N "testing --cue=-1.4 $desc... " $ECHO_C
  742. run_flac $dopt -o z50c.cued.$in_fmt --cue=-1.4 z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
  743. $CMP 50c.until30.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=-1.4 $desc"
  744. rm -f z50c.cued.$in_fmt
  745. echo OK
  746. echo $ECHO_N "testing --cue=1.0-5.0 $desc... " $ECHO_C
  747. run_flac $dopt -o z50c.cued.$in_fmt --cue=1.0-5.0 z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
  748. $CMP 50c.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=1.0-5.0 $desc"
  749. rm -f z50c.cued.$in_fmt
  750. echo OK
  751. echo $ECHO_N "testing --cue=1.1-5.0 $desc... " $ECHO_C
  752. run_flac $dopt -o z50c.cued.$in_fmt --cue=1.1-5.0 z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
  753. $CMP 50c.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=1.1-5.0 $desc"
  754. rm -f z50c.cued.$in_fmt
  755. echo OK
  756. echo $ECHO_N "testing --cue=1.2-4.1 $desc... " $ECHO_C
  757. run_flac $dopt -o z50c.cued.$in_fmt --cue=1.2-4.1 z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
  758. $CMP 50c.skip10.until40.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=1.2-4.1 $desc"
  759. rm -f z50c.cued.$in_fmt
  760. echo OK
  761. echo $ECHO_N "testing --cue=1.4-2.0 $desc... " $ECHO_C
  762. run_flac $dopt -o z50c.cued.$in_fmt --cue=1.4-2.0 z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
  763. $CMP 50c.skip20.until30.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=1.4-2.0 $desc"
  764. rm -f z50c.cued.$in_fmt
  765. echo OK
  766. rm -f z50c.cue.$out_fmt
  767. }
  768. test_cue raw flac
  769. test_cue wav flac
  770. test_cue aiff flac
  771. test_cue flac flac
  772. #@@@if [ $has_ogg = yes ] ; then
  773. #@@@ #@@@ doesn't work yet because md5cmp doesn't work because metaflac doesn't work on ogg flac yet
  774. #@@@ test_cue ogg flac
  775. #@@@fi
  776. if [ $has_ogg = yes ] ; then
  777. test_cue raw ogg
  778. test_cue wav ogg
  779. test_cue aiff ogg
  780. #@@@ doesn't work yet because md5cmp doesn't work because metaflac doesn't work on ogg flac yet
  781. #@@@test_cue flac ogg
  782. #@@@test_cue ogg ogg
  783. fi
  784. ############################################################################
  785. # test 'fixup' code that happens when a FLAC file with total_samples == 0
  786. # in the STREAMINFO block is converted to WAVE or AIFF, requiring the
  787. # decoder go back and fix up the chunk headers
  788. ############################################################################
  789. echo $ECHO_N "WAVE fixup test... " $ECHO_C
  790. echo $ECHO_N "prepare... " $ECHO_C
  791. convert_to_wav noise "$raw_eopt" "$wav_dopt" || die "ERROR creating reference WAVE"
  792. echo $ECHO_N "encode... " $ECHO_C
  793. # the pipe from 'cat' to 'flac' does not work on cygwin because of the EOF/
  794. # binary-mode stdin problem, so we use an undocumented option to metaflac to
  795. # set the total sample count to 0
  796. if [ $is_win = yes ] ; then
  797. run_flac $raw_eopt noise.raw -o fixup.flac || die "ERROR generating FLAC file"
  798. run_metaflac --set-total-samples=0 fixup.flac 2> /dev/null
  799. else
  800. cat noise.raw | run_flac $raw_eopt - -c > fixup.flac || die "ERROR generating FLAC file"
  801. fi
  802. echo $ECHO_N "decode... " $ECHO_C
  803. run_flac $wav_dopt fixup.flac -o fixup.wav || die "ERROR decoding FLAC file"
  804. echo $ECHO_N "compare... " $ECHO_C
  805. cmp noise.wav fixup.wav || die "ERROR: file mismatch"
  806. echo OK
  807. rm -f noise.wav fixup.wav fixup.flac
  808. echo $ECHO_N "AIFF fixup test... " $ECHO_C
  809. echo $ECHO_N "prepare... " $ECHO_C
  810. convert_to_aiff noise "$raw_eopt" "$wav_dopt" || die "ERROR creating reference AIFF"
  811. echo $ECHO_N "encode... " $ECHO_C
  812. # the pipe from 'cat' to 'flac' does not work on cygwin because of the EOF/
  813. # binary-mode stdin problem, so we use an undocumented option to metaflac to
  814. # set the total sample count to 0
  815. if [ $is_win = yes ] ; then
  816. run_flac $raw_eopt noise.raw -o fixup.flac || die "ERROR generating FLAC file"
  817. run_metaflac --set-total-samples=0 fixup.flac 2> /dev/null
  818. else
  819. cat noise.raw | run_flac $raw_eopt - -c > fixup.flac || die "ERROR generating FLAC file"
  820. fi
  821. echo $ECHO_N "decode... " $ECHO_C
  822. run_flac $wav_dopt fixup.flac -o fixup.aiff || die "ERROR decoding FLAC file"
  823. echo $ECHO_N "compare... " $ECHO_C
  824. cmp noise.aiff fixup.aiff || die "ERROR: file mismatch"
  825. echo OK
  826. rm -f noise.aiff fixup.aiff fixup.flac
  827. ############################################################################
  828. # multi-file tests
  829. ############################################################################
  830. echo "Generating multiple input files from noise..."
  831. multifile_format_decode="--endian=big --sign=signed"
  832. multifile_format_encode="$multifile_format_decode --sample-rate=44100 --bps=16 --channels=2 --no-padding"
  833. short_noise_cdda_samples=`expr $total_noise_cdda_samples / 8`
  834. run_flac --verify --force --force-raw-format $multifile_format_encode --until=$short_noise_cdda_samples -o shortnoise.flac noise.raw || die "ERROR generating FLAC file"
  835. run_flac --decode --force shortnoise.flac -o shortnoise.raw --force-raw-format $multifile_format_decode || die "ERROR generating RAW file"
  836. run_flac --decode --force shortnoise.flac || die "ERROR generating WAVE file"
  837. run_flac --decode --force shortnoise.flac -o shortnoise.aiff || die "ERROR generating AIFF file"
  838. cp shortnoise.flac file0.flac
  839. cp shortnoise.flac file1.flac
  840. cp shortnoise.flac file2.flac
  841. rm -f shortnoise.flac
  842. cp shortnoise.wav file0.wav
  843. cp shortnoise.wav file1.wav
  844. cp shortnoise.wav file2.wav
  845. rm -f shortnoise.wav
  846. cp shortnoise.aiff file0.aiff
  847. cp shortnoise.aiff file1.aiff
  848. cp shortnoise.aiff file2.aiff
  849. rm -f shortnoise.aiff
  850. cp shortnoise.raw file0.raw
  851. cp shortnoise.raw file1.raw
  852. cp shortnoise.raw file2.raw
  853. rm -f shortnoise.raw
  854. # create authoritative sector-aligned files for comparison
  855. file0_samples=`expr \( $short_noise_cdda_samples / 588 \) \* 588`
  856. file0_remainder=`expr $short_noise_cdda_samples - $file0_samples`
  857. file1_samples=`expr \( \( $file0_remainder + $short_noise_cdda_samples \) / 588 \) \* 588`
  858. file1_remainder=`expr $file0_remainder + $short_noise_cdda_samples - $file1_samples`
  859. file1_samples=`expr $file1_samples - $file0_remainder`
  860. file2_samples=`expr \( \( $file1_remainder + $short_noise_cdda_samples \) / 588 \) \* 588`
  861. file2_remainder=`expr $file1_remainder + $short_noise_cdda_samples - $file2_samples`
  862. file2_samples=`expr $file2_samples - $file1_remainder`
  863. if [ $file2_remainder != '0' ] ; then
  864. file2_samples=`expr $file2_samples + $file2_remainder`
  865. file2_remainder=`expr 588 - $file2_remainder`
  866. fi
  867. dd if=file0.raw ibs=4 count=$file0_samples of=file0s.raw 2>/dev/null || $dddie
  868. dd if=file0.raw ibs=4 count=$file0_remainder of=file1s.raw skip=$file0_samples 2>/dev/null || $dddie
  869. dd if=file1.raw ibs=4 count=$file1_samples of=z.raw 2>/dev/null || $dddie
  870. cat z.raw >> file1s.raw || die "ERROR: cat-ing sector-aligned files"
  871. dd if=file1.raw ibs=4 count=$file1_remainder of=file2s.raw skip=$file1_samples 2>/dev/null || $dddie
  872. dd if=file2.raw ibs=4 count=$file2_samples of=z.raw 2>/dev/null || $dddie
  873. cat z.raw >> file2s.raw || die "ERROR: cat-ing sector-aligned files"
  874. dd if=/dev/zero ibs=4 count=$file2_remainder of=z.raw 2>/dev/null || $dddie
  875. cat z.raw >> file2s.raw || die "ERROR: cat-ing sector-aligned files"
  876. rm -f z.raw
  877. convert_to_wav file0s "$multifile_format_encode --force --force-raw-format" "$SILENT --force --decode" || die "ERROR creating authoritative sector-aligned WAVE"
  878. convert_to_wav file1s "$multifile_format_encode --force --force-raw-format" "$SILENT --force --decode" || die "ERROR creating authoritative sector-aligned WAVE"
  879. convert_to_wav file2s "$multifile_format_encode --force --force-raw-format" "$SILENT --force --decode" || die "ERROR creating authoritative sector-aligned WAVE"
  880. convert_to_aiff file0s "$multifile_format_encode --force --force-raw-format" "$SILENT --force --decode" || die "ERROR creating authoritative sector-aligned AIFF"
  881. convert_to_aiff file1s "$multifile_format_encode --force --force-raw-format" "$SILENT --force --decode" || die "ERROR creating authoritative sector-aligned AIFF"
  882. convert_to_aiff file2s "$multifile_format_encode --force --force-raw-format" "$SILENT --force --decode" || die "ERROR creating authoritative sector-aligned AIFF"
  883. test_multifile ()
  884. {
  885. input_type=$1
  886. streamtype=$2
  887. sector_align=$3
  888. encode_options="$4"
  889. extra_encode_options=""
  890. extra_decode_options=""
  891. if [ $input_type = "raw" ] ; then
  892. extra_encode_options="--force-raw-format $multifile_format_encode"
  893. extra_decode_options="--force-raw-format $multifile_format_decode"
  894. else
  895. if [ $input_type = "aiff" ] ; then
  896. extra_decode_options="--force-aiff-format"
  897. fi
  898. fi
  899. if [ $streamtype = ogg ] ; then
  900. suffix=oga
  901. encode_options="$encode_options --ogg"
  902. else
  903. suffix=flac
  904. fi
  905. if [ $sector_align = sector_align ] ; then
  906. encode_options="$encode_options --sector-align"
  907. fi
  908. if [ $input_type = flac ] || [ $input_type = ogg ] ; then
  909. CMP=md5cmp
  910. else
  911. CMP=cmp
  912. fi
  913. for n in 0 1 2 ; do
  914. cp file$n.$input_type file${n}x.$input_type
  915. done
  916. run_flac --force $encode_options $extra_encode_options file0x.$input_type file1x.$input_type file2x.$input_type || die "ERROR"
  917. run_flac --force --decode $extra_decode_options file0x.$suffix file1x.$suffix file2x.$suffix || die "ERROR"
  918. if [ $sector_align != sector_align ] ; then
  919. for n in 0 1 2 ; do
  920. $CMP file$n.$input_type file${n}x.$input_type || die "ERROR: file mismatch on file #$n"
  921. done
  922. else
  923. for n in 0 1 2 ; do
  924. $CMP file${n}s.$input_type file${n}x.$input_type || die "ERROR: file mismatch on file #$n"
  925. done
  926. fi
  927. for n in 0 1 2 ; do
  928. rm -f file${n}x.$suffix file${n}x.$input_type
  929. done
  930. }
  931. input_types="raw wav aiff flac"
  932. #@@@ doesn't work yet because md5cmp doesn't work because metaflac doesn't work on ogg flac yet
  933. #@@@if [ $has_ogg = yes ] ; then
  934. #@@@ input_types="$input_types ogg"
  935. #@@@fi
  936. for input_type in $input_types ; do
  937. echo "Testing multiple $input_type files without verify..."
  938. test_multifile $input_type flac no_sector_align ""
  939. echo "Testing multiple $input_type files with verify..."
  940. test_multifile $input_type flac no_sector_align "--verify"
  941. if [ $input_type != flac ] && [ $input_type != ogg ] ; then # --sector-align not supported for FLAC input
  942. echo "Testing multiple $input_type files with --sector-align, without verify..."
  943. test_multifile $input_type flac sector_align ""
  944. echo "Testing multiple $input_type files with --sector-align, with verify..."
  945. test_multifile $input_type flac sector_align "--verify"
  946. fi
  947. if [ $has_ogg = yes ] ; then
  948. echo "Testing multiple $input_type files with --ogg, without verify..."
  949. test_multifile $input_type ogg no_sector_align ""
  950. echo "Testing multiple $input_type files with --ogg, with verify..."
  951. test_multifile $input_type ogg no_sector_align "--verify"
  952. if [ $input_type != flac ] ; then # --sector-align not supported for FLAC input
  953. echo "Testing multiple $input_type files with --ogg and --sector-align, without verify..."
  954. test_multifile $input_type ogg sector_align ""
  955. echo "Testing multiple $input_type files with --ogg and --sector-align, with verify..."
  956. test_multifile $input_type ogg sector_align "--verify"
  957. fi
  958. echo "Testing multiple $input_type files with --ogg and --serial-number, with verify..."
  959. test_multifile $input_type ogg no_sector_align "--serial-number=321 --verify"
  960. fi
  961. done
  962. ############################################################################
  963. # test --keep-foreign-metadata
  964. ############################################################################
  965. echo "Testing --keep-foreign-metadata..."
  966. rt_test_wav wacky1.wav '--keep-foreign-metadata'
  967. rt_test_wav wacky2.wav '--keep-foreign-metadata'
  968. rt_test_w64 wacky1.w64 '--keep-foreign-metadata'
  969. rt_test_w64 wacky2.w64 '--keep-foreign-metadata'
  970. rt_test_rf64 wacky1.rf64 '--keep-foreign-metadata'
  971. rt_test_rf64 wacky2.rf64 '--keep-foreign-metadata'
  972. ############################################################################
  973. # test the metadata-handling properties of flac-to-flac encoding
  974. ############################################################################
  975. echo "Testing the metadata-handling properties of flac-to-flac encoding..."
  976. testdatadir=${top_srcdir}/test/flac-to-flac-metadata-test-files
  977. filter ()
  978. {
  979. # minor danger, changing vendor strings might change the length of the
  980. # VORBIS_COMMENT block, but if we a