From 1f0daccf2b58994879ffa627a5e6000e3c321139 Mon Sep 17 00:00:00 2001 From: Erik de Castro Lopo Date: Sun, 14 Oct 2012 21:40:40 +1100 Subject: [PATCH] Add a regresion test for compression levels. --- src/test_streams/main.c | 46 ++++++++++++++++++++++++++++++++++++++++++++ test/Makefile.am | 5 ++++- test/test_compression.sh | 50 ++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 100 insertions(+), 1 deletion(-) create mode 100755 test/test_compression.sh diff --git a/src/test_streams/main.c b/src/test_streams/main.c index fe1173c..28a1468 100644 --- a/src/test_streams/main.c +++ b/src/test_streams/main.c @@ -869,6 +869,51 @@ foo: return false; } +static FLAC__bool generate_noisy_sine(void) +{ + FILE *f; + FLAC__byte wav[] = { + 'R', 'I', 'F', 'F', 76, 0, 0, 0, + 'W', 'A', 'V', 'E', 'f', 'm', 't', ' ', + 16, 0, 0, 0, 1, 0, 1, 0, + 0x44,0xAC, 0, 0,0x88,0x58,0x01, 0, + 2, 0, 16, 0, 'd', 'a', 't', 'a', + 0xa8, 0xba, 0x6, 0 + }; + int32_t randstate = 0x1243456; + double sample, last_val = 0.0; + int k; + + if(0 == (f = fopen("noisy-sine.wav", "wb"))) + return false; + if(fwrite(wav, 1, sizeof (wav), f) < sizeof (wav)) + goto foo; + + for (k = 0 ; k < 5 * 44100 ; k++) { + /* Obvioulsy not a crypto quality RNG. */ + randstate = 11117 * randstate + 211231; + randstate = 11117 * randstate + 211231; + randstate = 11117 * randstate + 211231; + + sample = randstate / (0x7fffffff * 1.000001); + sample = 0.2 * sample - 0.9 * last_val; + + last_val = sample; + + sample += sin (2.0 * k * M_PI * 1.0 / 32.0); + sample *= 0.4; + + write_little_endian_int16(f, lrintf(sample * 32700.0)); + }; + + fclose(f); + + return true; +foo: + fclose(f); + return false; +} + static FLAC__bool generate_wackywav64s(void) { FILE *f; @@ -1078,6 +1123,7 @@ int main(int argc, char *argv[]) if(!generate_wackywavs()) return 1; if(!generate_wackywav64s()) return 1; if(!generate_wackyrf64s()) return 1; + if(!generate_noisy_sine()) return 1; for(channels = 1; channels <= 8; channels *= 2) { unsigned bits_per_sample; for(bits_per_sample = 8; bits_per_sample <= 24; bits_per_sample += 4) { diff --git a/test/Makefile.am b/test/Makefile.am index d423c0b..9bc3b1e 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -26,7 +26,8 @@ check_SCRIPTS = \ test_flac.sh \ test_metaflac.sh \ test_seeking.sh \ - test_streams.sh + test_streams.sh \ + test_compression.sh # This one should pass when building out-of-tree (eg 'make distcheck'). check: $(check_SCRIPTS) @@ -36,6 +37,7 @@ if FLaC__WITH_CPPLIBS endif $(srcdir)/test_seeking.sh $(srcdir)/test_streams.sh + $(srcdir)/test_compression.sh @echo "----------------" @echo "All tests passed" @echo "----------------" @@ -53,6 +55,7 @@ endif ./test_metaflac.sh ./test_seeking.sh ./test_streams.sh + ./test_compression.sh @echo "----------------" @echo "All tests passed" @echo "----------------" diff --git a/test/test_compression.sh b/test/test_compression.sh new file mode 100755 index 0000000..6507a44 --- /dev/null +++ b/test/test_compression.sh @@ -0,0 +1,50 @@ +#!/bin/sh + +# FLAC - Free Lossless Audio Codec +# Copyright (C) 2012 Xiph.Org Foundation +# +# This file is part the FLAC project. FLAC is comprised of several +# components distributed under difference licenses. The codec libraries +# are distributed under Xiph.Org's BSD-like license (see the file +# COPYING.Xiph in this distribution). All other programs, libraries, and +# plugins are distributed under the GPL (see COPYING.GPL). The documentation +# is distributed under the Gnu FDL (see COPYING.FDL). Each file in the +# FLAC distribution contains at the top the terms under which it may be +# distributed. +# +# Since this particular file is relevant to all components of FLAC, +# it may be distributed under the Xiph.Org license, which is the least +# restrictive of those mentioned above. See the file COPYING.Xiph in this +# distribution. + +LD_LIBRARY_PATH=`pwd`/../src/libFLAC/.libs:$LD_LIBRARY_PATH +LD_LIBRARY_PATH=`pwd`/../src/share/grabbag/.libs:$LD_LIBRARY_PATH +LD_LIBRARY_PATH=`pwd`/../src/share/getopt/.libs:$LD_LIBRARY_PATH +LD_LIBRARY_PATH=`pwd`/../src/share/replaygain_analysis/.libs:$LD_LIBRARY_PATH +LD_LIBRARY_PATH=`pwd`/../src/share/replaygain_synthesis/.libs:$LD_LIBRARY_PATH +LD_LIBRARY_PATH=`pwd`/../src/share/utf8/.libs:$LD_LIBRARY_PATH +LD_LIBRARY_PATH=`pwd`/../obj/$BUILD/lib:$LD_LIBRARY_PATH +export LD_LIBRARY_PATH +PATH=`pwd`/../src/flac:$PATH + +echo "Using FLAC binary :" `which flac` + +date=`date "+%Y%m%dT%H%M%S"` +fname="comp${date}.flac" + +last_size=0 +last_k=0 +for k in `seq 1 8` ; do + flac -${k} --silent noisy-sine.wav -o ${fname} + size=`stat --format="%s" ${fname}` + echo "Compression level ${k}, file size ${size} bytes." + if test $k -gt 1 ; then + if test $last_size -lt $size ; then + echo "Error : Compression $last_k size $last_size >= compression $k size $size." + exit 1 + fi + fi + last_size=$size + last_k=$k + rm -f $fname + done -- 2.7.4