flac.git
4 years agoScripts/cross-build-win-binaries.mk : Add a 'clean' target.
Erik de Castro Lopo [Thu, 27 Nov 2014 03:04:08 +0000 (14:04 +1100)]
Scripts/cross-build-win-binaries.mk : Add a 'clean' target.

4 years agosrc/libFLAC/stream_decoder.c : Fail safely to avoid a heap overflow.
Erik de Castro Lopo [Thu, 27 Nov 2014 00:55:11 +0000 (11:55 +1100)]
src/libFLAC/stream_decoder.c : Fail safely to avoid a heap overflow.

This fix is closely related to the fix for CVE-2014-9028. When that
fix went public Miroslav Lichvar noticed a similar potential problem
spot in the same function and was able to craft a file to trigger a
heap write overflow.

Reported-by : Miroslav Lichvar <mlichvar@redhat.com>

4 years agoexamples/*/Makefile.am : Add CLEANFILES line to remove Windows .exe files.
Erik de Castro Lopo [Thu, 27 Nov 2014 02:40:01 +0000 (13:40 +1100)]
examples/*/Makefile.am : Add CLEANFILES line to remove Windows .exe files.

4 years agotests/*.sh : Switch back to /bin/sh.
Erik de Castro Lopo [Thu, 27 Nov 2014 02:03:13 +0000 (13:03 +1100)]
tests/*.sh : Switch back to /bin/sh.

Jan Stary reported that on OpenBSD bash isn't located in /bin/
which means that the test fail. He also noted that there didn't
seem to be anything bash specific in the tests.

This patch takes some suggestions from Jan, plus a few fixes tested
on Debian using the bin/sh provided by bash and dash.

Suggested-by: Jan Stary <hans@stare.cz>
4 years agochangelog.html : Minor corrections in decoding speed entry.
Erik de Castro Lopo [Wed, 26 Nov 2014 22:08:47 +0000 (09:08 +1100)]
changelog.html : Minor corrections in decoding speed entry.

4 years agoNormalize some copyright dates strings.
Erik de Castro Lopo [Wed, 26 Nov 2014 21:24:47 +0000 (08:24 +1100)]
Normalize some copyright dates strings.

This will make it easier to simply search and replace.

4 years agoSome last copyright year updates and change to open bug list
Martijn van Beurden [Wed, 26 Nov 2014 10:15:09 +0000 (11:15 +0100)]
Some last copyright year updates and change to open bug list

This updates one rather important mention of the copyright year
(the encoding/decoding progress display) and a few in the
documentation. Furthermore, it updates the open bug list

Signed-off-by: Erik de Castro Lopo <erikd@mega-nerd.com>
4 years agoFix two un-related typos.
Erik de Castro Lopo [Wed, 26 Nov 2014 09:42:15 +0000 (20:42 +1100)]
Fix two un-related typos.

4 years agotest/test_compression.sh : Fix for OSX.
Erik de Castro Lopo [Wed, 26 Nov 2014 05:20:06 +0000 (16:20 +1100)]
test/test_compression.sh : Fix for OSX.

On Mac OSX, the 'wc -c' command returns a number with leading whitespace
which then results in a syntax error when the shell parser expects a
number when it really has a string containing a number. The easy fix is
to use string interpolation.

Closes: https://sourceforge.net/p/flac/bugs/420/
Reported-by: Mark Harris <mark.hsj@gmail.com>
4 years agoScripts/cross-build-win-binaries.mk : Strip the binaries.
Erik de Castro Lopo [Tue, 25 Nov 2014 19:42:21 +0000 (06:42 +1100)]
Scripts/cross-build-win-binaries.mk : Strip the binaries.

4 years agolibFLAC/format.c : Fix the date in FLAC__VENDOR_STRING.
Erik de Castro Lopo [Tue, 25 Nov 2014 19:41:51 +0000 (06:41 +1100)]
libFLAC/format.c : Fix the date in FLAC__VENDOR_STRING.

4 years agoMore date fixes.
Erik de Castro Lopo [Tue, 25 Nov 2014 09:02:22 +0000 (20:02 +1100)]
More date fixes.

4 years agoSet version to 1.3.1pre1. 1.3.1pre1
Erik de Castro Lopo [Mon, 24 Nov 2014 11:13:27 +0000 (22:13 +1100)]
Set version to 1.3.1pre1.

4 years agoAdd file Scripts/cross-build-win-binaries.mk.
Erik de Castro Lopo [Tue, 25 Nov 2014 08:07:20 +0000 (19:07 +1100)]
Add file Scripts/cross-build-win-binaries.mk.

4 years agoMakefile.am : EXTRA_DIST should contain FLAC-vs2005.sln.
Erik de Castro Lopo [Mon, 24 Nov 2014 19:02:30 +0000 (06:02 +1100)]
Makefile.am : EXTRA_DIST should contain FLAC-vs2005.sln.

4 years agoUpdate copyright years to include 2014.
Erik de Castro Lopo [Mon, 24 Nov 2014 11:07:15 +0000 (22:07 +1100)]
Update copyright years to include 2014.

4 years agosrc/libFACL/stream_decoder.c : Fail safely to avoid a heap overflow.
Erik de Castro Lopo [Thu, 20 Nov 2014 03:35:59 +0000 (19:35 -0800)]
src/libFACL/stream_decoder.c : Fail safely to avoid a heap overflow.

A file provided by the reporters caused the stream decoder to write to
un-allocated heap space resulting in a segfault. The solution is to
error out (by returning false from read_residual_partitioned_rice_())
instead of trying to continue to decode.

Fixes: CVE-2014-9028
Reported-by: Michele Spagnuolo,
             Google Security Team <mikispag@google.com>

4 years agodoc/html/changelog.html : Add attributions and fix a typo.
Erik de Castro Lopo [Mon, 24 Nov 2014 10:54:34 +0000 (21:54 +1100)]
doc/html/changelog.html : Add attributions and fix a typo.

4 years agodoc/html/changelog.html : Update for 1.3.1 release.
Erik de Castro Lopo [Mon, 24 Nov 2014 10:09:07 +0000 (21:09 +1100)]
doc/html/changelog.html : Update for 1.3.1 release.

4 years agoRename Visual Studio solution files.
Erik de Castro Lopo [Sun, 23 Nov 2014 19:05:10 +0000 (06:05 +1100)]
Rename Visual Studio solution files.

* FLAC-vs2010.sln -> FLAC.sln
* FLAC.sln -> FLAC-vs2005.sln

4 years agoexamples/c/decode/file/main.c : Add extra error handling.
Erik de Castro Lopo [Thu, 20 Nov 2014 10:19:36 +0000 (21:19 +1100)]
examples/c/decode/file/main.c : Add extra error handling.

Michele Spagnuolo provided a file that initially had frames with two
channels but then had a frame with a single channel. This example
program only supports exactly two channels and previously had
insufficient validation.

Closes: https://sourceforge.net/p/flac/bugs/418/
Reported-by: Michele Spagnuolo,
             Google Security Team <mikispag@google.com>

4 years agosrc/libFLAC/stream_decoder.c : Fix buffer read overflow.
Erik de Castro Lopo [Tue, 18 Nov 2014 15:20:25 +0000 (07:20 -0800)]
src/libFLAC/stream_decoder.c : Fix buffer read overflow.

This is CVE-2014-8962.

Reported-by: Michele Spagnuolo,
             Google Security Team <mikispag@google.com>

4 years agolibFLAC: fix more problems with new window functions
Martijn van Beurden [Sun, 16 Nov 2014 14:09:54 +0000 (15:09 +0100)]
libFLAC: fix more problems with new window functions

This fixes two problems with handling of out-of-bounds arguments
for the window functions, one of which involving an infinite loop

Signed-off-by: Erik de Castro Lopo <erikd@mega-nerd.com>
4 years agoImprove description of encoding preset equivalents.
Erik de Castro Lopo [Sat, 15 Nov 2014 17:19:19 +0000 (09:19 -0800)]
Improve description of encoding preset equivalents.

Patch-from: lvqcl <lvqcl.mail@gmail.com>

4 years agometadata_iterators.c : Set status when metadata itereator is not writable.
Erik de Castro Lopo [Sat, 15 Nov 2014 07:35:37 +0000 (23:35 -0800)]
metadata_iterators.c : Set status when metadata itereator is not writable.

The status should be FLAC__METADATA_SIMPLE_ITERATOR_STATUS_ILLEGAL_INPUT.

Closes: http://sourceforge.net/p/flac/patches/50/

4 years agolibFLAC : Add more checks to partial_tukey and punchout_tukey windows.
Martijn van Beurden [Thu, 13 Nov 2014 19:51:55 +0000 (20:51 +0100)]
libFLAC : Add more checks to partial_tukey and punchout_tukey windows.

Signed-off-by: Erik de Castro Lopo <erikd@mega-nerd.com>
4 years agoinclude/share/endswap.h : Fix usage of HAVE_BSWAP16.
Erik de Castro Lopo [Wed, 12 Nov 2014 15:02:35 +0000 (07:02 -0800)]
include/share/endswap.h : Fix usage of HAVE_BSWAP16.

The code was incorrectly using #ifndef on a value that was always defined
to a value of either 0 or 1.

4 years agoUpdate documentation for new compression presets
Martijn van Beurden [Mon, 10 Nov 2014 16:35:35 +0000 (17:35 +0100)]
Update documentation for new compression presets

Signed-off-by: Erik de Castro Lopo <erikd@mega-nerd.com>
4 years agoMake test_compression a little more forgiving
Martijn van Beurden [Wed, 22 Oct 2014 18:54:13 +0000 (20:54 +0200)]
Make test_compression a little more forgiving

The retune of compression levels makes this test fail. This is due
to a few approximations used in the encoder that determine which
LP coefficient should result in the smallest file. Differences are
usually very small, but in my case this resulted in compression
level 6 giving a 3 byte bigger file.

This patch lets the compression test pass even if the a compression
level results in a file that is up to 10 byte larger than the
previous level

Signed-off-by: Erik de Castro Lopo <erikd@mega-nerd.com>
4 years agoRetune FLAC compression levels
Martijn van Beurden [Mon, 20 Oct 2014 14:33:25 +0000 (16:33 +0200)]
Retune FLAC compression levels

This patch changes a the settings associated with compression
levels 6, 7 and 8. With this patch, -e is no longer used, but
instead apodization functions are added. This should improve
compression with at least 95% of all material while not changing
the speed much. Decoding ways, 6 and 8 stay the same, and 7 is
slowed a bit, which makes it as fast as 8.

Signed-off-by: Erik de Castro Lopo <erikd@mega-nerd.com>
4 years agoFix indenting on the bswap32 autoconf macro.
Ralph Giles [Tue, 4 Nov 2014 20:01:48 +0000 (12:01 -0800)]
Fix indenting on the bswap32 autoconf macro.

We generally prefer spaces to tabs.

Signed-off-by: Erik de Castro Lopo <erikd@mega-nerd.com>
4 years agoClean up bswap32 autoconf macro.
Ralph Giles [Tue, 4 Nov 2014 19:59:53 +0000 (11:59 -0800)]
Clean up bswap32 autoconf macro.

Improve 'checking' message and don't hog the cache namespace.

Signed-off-by: Erik de Castro Lopo <erikd@mega-nerd.com>
4 years agoUse a configure check for bswap16 instead of gcc version #ifdefs.
Ralph Giles [Tue, 4 Nov 2014 19:58:45 +0000 (11:58 -0800)]
Use a configure check for bswap16 instead of gcc version #ifdefs.

Fixes a build problem on apple clang.

Signed-off-by: Erik de Castro Lopo <erikd@mega-nerd.com>
4 years agoAdd autoconf macro to check for the bswap16 intrinsic.
Ralph Giles [Tue, 4 Nov 2014 19:57:28 +0000 (11:57 -0800)]
Add autoconf macro to check for the bswap16 intrinsic.

Signed-off-by: Erik de Castro Lopo <erikd@mega-nerd.com>
4 years agostream_encoder.c : Add apodization field to CompressionLevels struct.
Erik de Castro Lopo [Tue, 14 Oct 2014 19:47:39 +0000 (06:47 +1100)]
stream_encoder.c : Add apodization field to CompressionLevels struct.

Patch-from: lvqcl <lvqcl.mail@gmail.com>

4 years agoautogen.sh : Use long names for options to autoreconf.
Erik de Castro Lopo [Mon, 6 Oct 2014 07:10:31 +0000 (18:10 +1100)]
autogen.sh : Use long names for options to autoreconf.

4 years agolibFLAC/fixed_intrin_sse2.c : Fix comments.
Erik de Castro Lopo [Mon, 6 Oct 2014 19:34:18 +0000 (06:34 +1100)]
libFLAC/fixed_intrin_sse2.c : Fix comments.

Patch-from: lvqcl <lvqcl.mail@gmail.com>

4 years agoAdd AVX2 CPU support stream encoder.
Erik de Castro Lopo [Fri, 3 Oct 2014 23:42:54 +0000 (09:42 +1000)]
Add AVX2 CPU support stream encoder.

Patch-from: lvqcl <lvqcl.mail@gmail.com>

4 years agoAdd AVX/AVX2/FMA support to CPU detection code.
Erik de Castro Lopo [Fri, 3 Oct 2014 23:14:18 +0000 (09:14 +1000)]
Add AVX/AVX2/FMA support to CPU detection code.

Patch-from: lvqcl <lvqcl.mail@gmail.com>

4 years agolibFLAC/stream_encoder.c : Reduce about of hackery.
Erik de Castro Lopo [Fri, 3 Oct 2014 23:13:07 +0000 (09:13 +1000)]
libFLAC/stream_encoder.c : Reduce about of  hackery.

Patch-from: lvqcl <lvqcl.mail@gmail.com>

4 years agoRefactoring and simplifying of CPU detection.
Erik de Castro Lopo [Fri, 3 Oct 2014 23:05:08 +0000 (09:05 +1000)]
Refactoring and simplifying of CPU detection.

Patch-from: lvqcl <lvqcl.mail@gmail.com>

4 years agoRemove support for AMD's 3Dnow.
Erik de Castro Lopo [Fri, 3 Oct 2014 23:01:31 +0000 (09:01 +1000)]
Remove support for AMD's 3Dnow.

AMD stopped release new chips withe 3DNow in 2010.

Patch-from: lvqcl <lvqcl.mail@gmail.com>

4 years agosrc/libFLAC/window.c : Add 'f' to float literals to avoid compiler warnings.
Erik de Castro Lopo [Thu, 2 Oct 2014 20:50:27 +0000 (06:50 +1000)]
src/libFLAC/window.c : Add 'f' to float literals to avoid compiler warnings.

Patch-from: lvqcl <lvqcl.mail@gmail.com>

4 years agosrc/flac/decode.c : Decoder buffering improvements on Windows.
Erik de Castro Lopo [Thu, 2 Oct 2014 20:45:20 +0000 (06:45 +1000)]
src/flac/decode.c : Decoder buffering improvements on Windows.

On Windows, decoding flac files is also prone to producing fragmented
files. Avoid fragmentation on NTFS by using Windows specific functions to
tell Windows the size of the file beforehand.

Patch-from: Janne Hyvärinen <cse@sci.fi>

4 years agostream_encoder.c : Only set 10MB output buffer on _WIN32.
Erik de Castro Lopo [Sat, 27 Sep 2014 22:43:24 +0000 (08:43 +1000)]
stream_encoder.c : Only set 10MB output buffer on _WIN32.

Commig 6a6207b52a set the size of the encoder output buffer to 10MB
but this fix is really only needed on Windows, so wrap it in an #ifdef.

4 years agoImprove malformed vorbiscomment handling.
Erik de Castro Lopo [Fri, 26 Sep 2014 22:52:27 +0000 (08:52 +1000)]
Improve malformed vorbiscomment handling.

A few minor tweaks on a patch from Janne Hyvärinen <cse@sci.fi>.

fixup

4 years agometaflac : Fix typo in error message.
Erik de Castro Lopo [Thu, 25 Sep 2014 20:28:46 +0000 (06:28 +1000)]
metaflac : Fix typo in error message.

Patch-from: Janne Hyvärinen <cse@sci.fi>

4 years agolibFLAC/cpu.c : Refactor for readability.
Erik de Castro Lopo [Tue, 23 Sep 2014 20:41:56 +0000 (06:41 +1000)]
libFLAC/cpu.c : Refactor for readability.

Patch-from: lvqcl <lvqcl.mail@gmail.com>

4 years agostream_encoder.c : Give the encoder a larger stdio buffer.
Erik de Castro Lopo [Tue, 23 Sep 2014 20:35:14 +0000 (06:35 +1000)]
stream_encoder.c : Give the encoder a larger stdio buffer.

Windows in particular can experience slow encoding speeds on highly
fragmented disks. Using setvbuf to increase the size of the buffer to
10Meg.

This is probably not needed on Linux/Unix, but is very unlikely to
to cause any negative effects.

Patch-from: Janne Hyvärinen <cse@sci.fi>

4 years agoflac : Add help output for --ignore-chunk-sizes option.
Erik de Castro Lopo [Tue, 23 Sep 2014 20:28:16 +0000 (06:28 +1000)]
flac : Add help output for --ignore-chunk-sizes option.

Patch-from: lvqcl <lvqcl.mail@gmail.com>

4 years agolibFLAC/window.c : Whitespace.
Erik de Castro Lopo [Mon, 22 Sep 2014 20:16:31 +0000 (06:16 +1000)]
libFLAC/window.c : Whitespace.

4 years agoWindows specific vsnprintf fixes.
Erik de Castro Lopo [Mon, 22 Sep 2014 08:29:32 +0000 (18:29 +1000)]
Windows specific vsnprintf fixes.

* Changes flac_snprintf (in src/share/grabbag/snprintf.c) and its copy
  local_snprintf (src/libFLAC/metadata_iterators.c) to be almost sane.

* Adds flac_vsnprintf (src/share/grabbag/snprintf.c) and its copy
  local_vsnprintf (src/share/win_utf8_io/win_utf8_io.c).

* Changes stats_print_info in src/flac/utils.c so it uses flac_vsnprintf
  instead of vsnprintf. This makes return value checking unnecessary.

Patch-from: lvqcl <lvqcl.mail@gmail.com>

4 years agowin_utf8_io.c : Comment only.
Erik de Castro Lopo [Mon, 22 Sep 2014 08:25:05 +0000 (18:25 +1000)]
win_utf8_io.c : Comment only.

Explains why flac is currently incompatible with extended-length paths.

Patch-from: lvqcl <lvqcl.mail@gmail.com>

4 years agoAdd partial_tukey and punchout_tukey apodization functions
Martijn van Beurden [Sun, 10 Aug 2014 08:59:29 +0000 (10:59 +0200)]
Add partial_tukey and punchout_tukey apodization functions

Adds two new apodization functions that seem to perform better than
the apodization functions currently in the codebase and fixes three
existing windows as well.

Its important to note that this patch only affects the encoder stage
that evaluates various possible predictors. Audio encoded with these
new windows will still decode with existing legacy decoders.

= Theory =
These functions are used to window the  audio data at the predictor
stage. These news functions enable the use of only part of the signal
to generate a predictor. This helps  because short transients can
introduce noise into the predictor. The  predictor becomes very good
at prediciting one part of the  signal, instead of mediocre for the
whole block.

Signed-off-by: Erik de Castro Lopo <erikd@mega-nerd.com>
4 years agoflac/utils.c : Fix calculation of a tag length.
Erik de Castro Lopo [Sun, 21 Sep 2014 11:11:41 +0000 (21:11 +1000)]
flac/utils.c : Fix calculation of a tag length.

Patch-from: lvqcl <lvqcl.mail@gmail.com>

4 years agolpc_intrin_sse41.c : Optimize decoding 24 bit files on 32 bit platforms.
Erik de Castro Lopo [Sat, 20 Sep 2014 23:39:15 +0000 (09:39 +1000)]
lpc_intrin_sse41.c : Optimize decoding 24 bit files on 32 bit platforms.

Patch-from: lvqcl <lvqcl.mail@gmail.com>

4 years agolpc_intrin* : Remove unused code.
Erik de Castro Lopo [Sat, 20 Sep 2014 23:33:39 +0000 (09:33 +1000)]
lpc_intrin* : Remove unused code.

Which in turn simplifies FLAC__lpc_restore_signal_16_intrin_sse2()
function.

Patch-from: lvqcl <lvqcl.mail@gmail.com>

4 years agofixed_intrin_sse[23].c : Add new, simpler SSE code.
Erik de Castro Lopo [Sat, 20 Sep 2014 23:28:36 +0000 (09:28 +1000)]
fixed_intrin_sse[23].c : Add new, simpler SSE code.

It's simpler but not faster so it is disabled by default. Maybe it
will be faster on newer CPUs though..

Patch-from: lvqcl <lvqcl.mail@gmail.com>

4 years agostream_encoder_intrin_sse[23].c : Optimize of int32 -> uint64 conversion.
Erik de Castro Lopo [Sat, 20 Sep 2014 22:48:17 +0000 (08:48 +1000)]
stream_encoder_intrin_sse[23].c : Optimize of int32 -> uint64 conversion.

Optimizes int32 -> uint64 conversion by doing zero extension (int32 ->
uint32 -> uint64) instead of sign extension (int32 -> int64 -> uint64).

Patch-from: lvqcl <lvqcl.mail@gmail.com>

4 years agowin_utf8_io.c: Use fputws instead of fwprintf.
Yuta NAKAI [Fri, 12 Sep 2014 14:53:45 +0000 (23:53 +0900)]
win_utf8_io.c: Use fputws instead of fwprintf.

Signed-off-by: Erik de Castro Lopo <erikd@mega-nerd.com>
4 years agoMinor clean up of win_utf8_io.
Erik de Castro Lopo [Sat, 20 Sep 2014 22:06:43 +0000 (08:06 +1000)]
Minor clean up of win_utf8_io.

Patch-from: lvqcl <lvqcl.mail@gmail.com>

4 years agovorbiscomment.c : Do not write empty vorbiscomment fields.
Erik de Castro Lopo [Fri, 19 Sep 2014 07:35:35 +0000 (17:35 +1000)]
vorbiscomment.c : Do not write empty vorbiscomment fields.

That is, only write vorbis comment fields if they are non-empty.

Patch-from: Janne Hyvärinen <cse@sci.fi>

4 years agofixed_intrin_sse[23].c : Simplify XMM -> int64 conversion.
Erik de Castro Lopo [Thu, 18 Sep 2014 11:39:36 +0000 (21:39 +1000)]
fixed_intrin_sse[23].c : Simplify  XMM -> int64 conversion.

Patch-from: lvqcl <lvqcl.mail@gmail.com>

4 years agocpu.h : Only define FLAC__SSE_SUPPORTED if FLAC__HAS_X86INTRIN is set.
Erik de Castro Lopo [Thu, 18 Sep 2014 11:35:11 +0000 (21:35 +1000)]
cpu.h : Only define FLAC__SSE_SUPPORTED if FLAC__HAS_X86INTRIN is set.

Patch-from: lvqcl <lvqcl.mail@gmail.com>

4 years agoRemove old/broken PPC/Altivec code.
Erik de Castro Lopo [Sun, 13 Jul 2014 11:19:48 +0000 (21:19 +1000)]
Remove old/broken PPC/Altivec code.

* Removes FLAC__lpc_restore_signal_asm_ppc_altivec_16*
  from lpc.h and stream_decoder.c
* Removes PPC-specific code from cpu.c and cpu.h
* Removes PPC stuff from libFLAC/Makefile.lite and build/*.mk
* Removes as/gas/PPC-specific stuff from configure.ac and
  libFLAC/Makefile.am*
* Removes libFLAC/ppc folder and remove "src/libFLAC/ppc*/Makefile"
  lines from configure.ac

Patch-from: lvqcl <lvqcl.mail@gmail.com>

5 years agowin_utf8_io.c : Remove redundant line.
Erik de Castro Lopo [Sat, 9 Aug 2014 03:03:56 +0000 (13:03 +1000)]
win_utf8_io.c : Remove redundant line.

Patch-from: lvqcl <lvqcl.mail@gmail.com>

5 years agowin_utf8_io.c : Fix potential memory leak.
Erik de Castro Lopo [Sat, 9 Aug 2014 03:02:56 +0000 (13:02 +1000)]
win_utf8_io.c : Fix potential memory leak.

Patch-from: lvqcl <lvqcl.mail@gmail.com>

5 years agowin_utf8_io.c : Use vsnprintf_s instead of vsprintf.
Erik de Castro Lopo [Sat, 9 Aug 2014 03:01:19 +0000 (13:01 +1000)]
win_utf8_io.c : Use vsnprintf_s instead of vsprintf.

Patch-from: lvqcl <lvqcl.mail@gmail.com>

5 years agolibFLAC/cpu.c : Refactor disabling SSE into a single function.
Erik de Castro Lopo [Sat, 9 Aug 2014 02:51:32 +0000 (12:51 +1000)]
libFLAC/cpu.c : Refactor disabling SSE into a single function.

Patch-from: lvqcl <lvqcl.mail@gmail.com>

5 years agoinclude/share/endswap.h : Improvements to fallthrough ENDSWAP_*.
Erik de Castro Lopo [Sat, 9 Aug 2014 02:47:20 +0000 (12:47 +1000)]
include/share/endswap.h : Improvements to fallthrough ENDSWAP_*.

According to patch author GCC can optimize expressions like
"(a<<8)|(a>>8)", but has problems with "(a<<8)+(a>>8)".

Patch-from: lvqcl <lvqcl.mail@gmail.com>

5 years agolibFLAC/lpc_intrin_sse.c : New SSE code to calculate autocorrelation.
Erik de Castro Lopo [Sat, 9 Aug 2014 02:32:57 +0000 (12:32 +1000)]
libFLAC/lpc_intrin_sse.c : New SSE code to calculate autocorrelation.

Accelerate FLAC__lpc_compute_autocorrelation_intrin_sse_lag_NN routines for
AMD and newer Intel CPUs (means Core i aka Nehalem and newer). Unfortunately
it's slower on older Intel CPUs.

According to tests at HA:

    <http://www.hydrogenaud.io/forums/index.php?s=&showtopic=101082&view=findpost&p=870753>

  CPU                 flac -5           flac -8

  Athlon XP           +5 %              +2.4 %
  Athlon 64 X2        +9 %              +4 %
  Core i              +7 %              +1 % ... +2.7 %
  Core 2              ?                 -3.5 %

According to Steam HW survey <http://store.steampowered.com/hwsurvey/>
69% of Steam users have SSE4.2 which means that the new code is faster for
them. There are also AMD users that don't have SSE4.2, so 75% of Steam users
should benefit from this patch.

Patch-from: lvqcl <lvqcl.mail@gmail.com>

5 years agoVarious documentation fixes, merge with website
Martijn van Beurden [Fri, 1 Aug 2014 07:57:38 +0000 (09:57 +0200)]
Various documentation fixes, merge with website

The html documentation was diff'ed to the current website pages
and all difference were merged into the page they weren't yet
incorporated. This includes lots of small fixes and
improvements.

Signed-off-by: Erik de Castro Lopo <erikd@mega-nerd.com>
5 years agoFix bug when using -p switch during compression
Martijn van Beurden [Mon, 28 Jul 2014 11:04:56 +0000 (13:04 +0200)]
Fix bug when using -p switch during compression

When using the -p switch during encoding, the encoder should try
different qlp predictor precision steps. However, some faulty code
was too severely restricting the possible steps. This patch lifts
the restriction to match a restriction coded a little further in
the process. This doesn't make using -p worth your while, but at
least it doesn't create larger files now

Signed-off-by: Erik de Castro Lopo <erikd@mega-nerd.com>
5 years agolibFLAC/cpu.c : Simplify OS SSE support detection.
Erik de Castro Lopo [Mon, 28 Jul 2014 10:49:09 +0000 (20:49 +1000)]
libFLAC/cpu.c : Simplify OS SSE support detection.

Simplify the code that tries to detect whether OS supports SSE instructions.

a) Linux: "old" vs "new" sigaction

OBSOLETE_SIGCONTEXT_FLAVOR was disabled in Mar 2007 in commit 1ca3a445f.
According to <http://unixhelp.ed.ac.uk/CGI/man-cgi?sigaction>: "Support for
SA_SIGINFO was added in Linux 2.2" (released in Jan 1999). If noone wants to
use FLAC with Linux kernel 2.0 then it's safe to delete this code.

b) MSVC: try/catch vs. sigill_handler

TRY_CATCH_FLAVOR was enabled in Jan 2009 in commit a832ef32. According to the
comment in cpu.c, "sigill_handler flavor resulted in several crash reports on
win32". Also this sigill_handler flavor is not thread-safe.

c) MinGW: fxsave/fxrestore vs. sigill_handler

The code was added Mar 2014 in commit 99d5154f. It's better to use FXSR flavor
instead of sigill_handler flavor. The reasons are the same as for MSVC.

Patch-from: lvqcl <lvqcl.mail@gmail.com>

5 years agolibFLAC : SSE optimisations.
Erik de Castro Lopo [Mon, 28 Jul 2014 10:43:54 +0000 (20:43 +1000)]
libFLAC : SSE optimisations.

Add new function:

    FLAC__lpc_compute_residual_from_qlp_coefficients_intrin_sse41()

and rewrite function:

    FLAC__lpc_compute_residual_from_qlp_coefficients_16_intrin_sse2()

Testing shows noticeable speed increase on Intel Core i3/5/7 (up to 30%
for -8 mode), AMD Athlon64, Phenom, Bulldozer/Piledriver, but no increase
or even very small speed decrease (~2% for -8 mode) on Intel Core2.

Patch-from: lvqcl <lvqcl.mail@gmail.com>

5 years agolibFLAC/bitreader.c : Remove redundant/incorrect comment.
Erik de Castro Lopo [Sun, 27 Jul 2014 11:24:27 +0000 (21:24 +1000)]
libFLAC/bitreader.c : Remove redundant/incorrect comment.

This comment should have been removed in commit eb0c5a37.

Patch-from: lvqcl <lvqcl.mail@gmail.com>

5 years agolibFLAC/bitreader : Remove un-needed FLAC__CPUInfo field from FLAC__BitReader.
Erik de Castro Lopo [Sun, 27 Jul 2014 11:21:46 +0000 (21:21 +1000)]
libFLAC/bitreader : Remove un-needed FLAC__CPUInfo field from FLAC__BitReader.

In FLAC 1.2.0, a new field 'FLAC__CPUInfo cpu_info' was added to the
FLAC__BitReader struct. It became useless in 1.3.0 because of various
bitreader optimizations.

Patch-from: lvqcl <lvqcl.mail@gmail.com>

5 years agoconfigure.ac : Fix --disable-sse option.
Erik de Castro Lopo [Sun, 27 Jul 2014 11:18:08 +0000 (21:18 +1000)]
configure.ac : Fix --disable-sse option.

Based on a patch from lvqcl <lvqcl.mail@gmail.com>.

5 years agoconfigure.ac : Erase default -O2 when setting -O3.
Erik de Castro Lopo [Sun, 27 Jul 2014 00:08:44 +0000 (10:08 +1000)]
configure.ac : Erase default -O2 when setting -O3.

Previously CFLAGS had a -O3 at the start and a -O2 at the end. According
to the GCC docs:

    https://gcc.gnu.org/onlinedocs/gcc-4.9.1/gcc/Optimize-Options.html

    "If you use multiple -O options, with or without level numbers,
    the last such option is the one that is effective" which means that
    GCC doesn't try to use SIMD to vectorize the code, etc."

5 years agoconfigure.ac : Set default CFLAGS to something sensible.
Erik de Castro Lopo [Sat, 26 Jul 2014 08:24:49 +0000 (18:24 +1000)]
configure.ac : Set default CFLAGS to something sensible.

Preserve the CFLAGS value from the time the configure script is run.

5 years agoflac and metaflac : Don't always call setlocale() in Windows.
Erik de Castro Lopo [Sat, 19 Jul 2014 08:17:25 +0000 (18:17 +1000)]
flac and metaflac : Don't always call setlocale() in Windows.

Windows (MSVC, MinGW) versions of setlocale don't care about LC_*
environment variables. For example, flac cannot pass the test for
--until and --skip options the script calls it with --skip=0:01.1001
and it expects decimal comma (--skip=0:01,1001) on some locales.

Solve this (on Windows) by calling setlocale(LC_ALL, "") if some
LC_* variable is set to "C".

Patch-from: lvqcl <lvqcl.mail@gmail.com>

5 years agolibFLAC/.../crc.h : Remove un-nneded parens in FLAC__CRC16_UPDATE macro.
Erik de Castro Lopo [Sat, 19 Jul 2014 08:13:06 +0000 (18:13 +1000)]
libFLAC/.../crc.h : Remove un-nneded parens in FLAC__CRC16_UPDATE macro.

Patch-from: lvqcl <lvqcl.mail@gmail.com>

5 years agoflac/main.c : Improved option validation with --force-raw-format.
Erik de Castro Lopo [Sun, 13 Jul 2014 10:53:15 +0000 (20:53 +1000)]
flac/main.c : Improved option validation with --force-raw-format.

Patch-from:  lvqcl <lvqcl.mail@gmail.com>

5 years agotest/test_flac.sh : Add --force-raw-format as needed.
Erik de Castro Lopo [Sun, 13 Jul 2014 10:38:57 +0000 (20:38 +1000)]
test/test_flac.sh : Add --force-raw-format as needed.

Patch-from: lvqcl <lvqcl.mail@gmail.com>

5 years agoinclude/share/endswap.h : Fix default ENDSWAP_16.
Erik de Castro Lopo [Sun, 13 Jul 2014 10:36:57 +0000 (20:36 +1000)]
include/share/endswap.h : Fix default ENDSWAP_16.

Patch-from: lvqcl <lvqcl.mail@gmail.com>

5 years agobuild/config.mk : Define CPU_IS_LITTLE_ENDIAN as needed.
Erik de Castro Lopo [Sun, 13 Jul 2014 10:35:11 +0000 (20:35 +1000)]
build/config.mk : Define CPU_IS_LITTLE_ENDIAN as needed.

Patch-from: lvqcl <lvqcl.mail@gmail.com>

5 years agoMakefile.ams: Add MSVS project files to EXTRA_DIST.
Erik de Castro Lopo [Wed, 9 Jul 2014 09:02:35 +0000 (19:02 +1000)]
Makefile.ams: Add MSVS project files to EXTRA_DIST.

Patch-from: lvqcl <lvqcl.mail@gmail.com>

5 years agotest_replaygain.sh : Add --force-raw-format option.
Erik de Castro Lopo [Tue, 8 Jul 2014 11:12:15 +0000 (21:12 +1000)]
test_replaygain.sh : Add --force-raw-format option.

This test was failing due to the lack of this option.

Patch-from: lvqcl <lvqcl.mail@gmail.com>

5 years agosrc/flac/utils.c : Make sure get_console_width() returns value > 0.
Erik de Castro Lopo [Tue, 8 Jul 2014 08:25:11 +0000 (18:25 +1000)]
src/flac/utils.c : Make sure get_console_width() returns value > 0.

Previous version of get_console_width() may return 0 which will result in
a division by 0 in stats_print_name():

console_width = get_console_width();
len = strlen_console(name)+2;
console_chars_left = console_width  - (len % console_width);

Bug-report: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=739613
Patch-from: lvqcl <lvqcl.mail@gmail.com>

5 years agoAdd project files for Visual Studio 2010 and later.
Erik de Castro Lopo [Sun, 6 Jul 2014 10:48:26 +0000 (20:48 +1000)]
Add project files for Visual Studio 2010 and later.

Also allows building for x86-64 Windows.

Patch-from: lvqcl <lvqcl.mail@gmail.com>

5 years agolibFLAC : Remove FLAC__bitreader_read_rice_signed_block_asm_ia32_bswap().
Erik de Castro Lopo [Sun, 6 Jul 2014 10:27:28 +0000 (20:27 +1000)]
libFLAC :  Remove FLAC__bitreader_read_rice_signed_block_asm_ia32_bswap().

This function was un-used because it showed no speed improvement over the
C version. As a result the bitreader_read_from_client_() function can be
made static again.

Patch-from: lvqcl <lvqcl.mail@gmail.com>

5 years agolibFLAC : Remove FLAC__precompute_partition_info_sums_32bit_asm_ia32_().
Erik de Castro Lopo [Sun, 6 Jul 2014 10:20:58 +0000 (20:20 +1000)]
libFLAC : Remove FLAC__precompute_partition_info_sums_32bit_asm_ia32_().

This function offer no speed up from the C version of the function and were
commented out after the release of 1.3.0. We will now drop them completely.

Patch-from: lvqcl <lvqcl.mail@gmail.com>

5 years agostream_encoder : Improve selection of residual accumulator width
Miroslav Lichvar [Thu, 19 Jun 2014 11:04:33 +0000 (13:04 +0200)]
stream_encoder : Improve selection of residual accumulator width

In the precompute_partition_info_sums_ function, instead of selecting
64-bit accumulator when the signal bps is larger than 16, revert to the
original approach based on partition size, but make room for few extra
bits to not overflow with unusual signals where the average residual
magnitude may be larger than bps.

It slightly improves the performance with standard encoding levels and
16-bit files as the 17-bit side channel can still be processed with the
32-bit accumulator and correctly selects the 64-bit accumulator with
very large 16-bit partitions.

This is related to commits 6f7ec60c and 187e596e.

Signed-off-by: Erik de Castro Lopo <erikd@mega-nerd.com>
5 years agotest_libFLAC/test_libFLAC.vcproj : One more CPU_IS_LITTLE_ENDIAN fix.
Erik de Castro Lopo [Thu, 3 Jul 2014 23:02:17 +0000 (09:02 +1000)]
test_libFLAC/test_libFLAC.vcproj : One more CPU_IS_LITTLE_ENDIAN fix.

Patch-from: lvqcl <lvqcl.mail@gmail.com>

5 years agosrc/ : Remove un-needed MSVC6 workaround.
Erik de Castro Lopo [Thu, 3 Jul 2014 22:31:57 +0000 (08:31 +1000)]
src/ : Remove un-needed MSVC6 workaround.

MSVC6 was not able to cast from a uint64_t to a double and this
commit removes some #ifdef hackery designed to work around this
problem.

Patch-from: lvqcl <lvqcl.mail@gmail.com>

5 years agotest_libFLAC/endswap.c : Add casts to prevent compiler warnings.
Erik de Castro Lopo [Thu, 3 Jul 2014 10:24:33 +0000 (20:24 +1000)]
test_libFLAC/endswap.c : Add casts to prevent compiler warnings.

5 years agotest_libFLAC/test_libFLAC.vcproj : Add define for CPU_IS_LITTLE_ENDIAN.
Erik de Castro Lopo [Thu, 3 Jul 2014 09:19:08 +0000 (19:19 +1000)]
test_libFLAC/test_libFLAC.vcproj : Add define for CPU_IS_LITTLE_ENDIAN.

5 years agoFix bswap16 issue on Debian 6.
Ralph Giles [Wed, 2 Jul 2014 21:12:38 +0000 (14:12 -0700)]
Fix bswap16 issue on Debian 6.

Versions of GCC prior to 4.8 didn't provide an implementation
of __builtin_bswap16 on x86_64. Detect those versions and
supply a fallback implementation. A cleaner fix would be
to detect bswap16 independently of bswap32 in configure
and handle them separately.

See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=52624

Signed-off-by: Erik de Castro Lopo <erikd@mega-nerd.com>
5 years agotest_libFLAC : Fix Windows build after addidion of endian tests.
Erik de Castro Lopo [Wed, 2 Jul 2014 19:38:09 +0000 (05:38 +1000)]
test_libFLAC : Fix Windows build after addidion of endian tests.

* Use "share/compat.h" instead of <stdint.h>.
* Update test_libFLAC.vcproj project file.
* Update Makefile.lite build system.

Patch-from: lvqcl <lvqcl.mail@gmail.com>

5 years agosrc/flac/main.c : Improve raw format help text help.
Erik de Castro Lopo [Wed, 2 Jul 2014 19:35:55 +0000 (05:35 +1000)]
src/flac/main.c : Improve raw format help text help.

The --endian and --sign options aren't just for raw input, but also
for raw output.

Patch-from: lvqcl <lvqcl.mail@gmail.com>