diff -Nru brutefir-1.0n/bfio_alsa.c brutefir-1.0o/bfio_alsa.c --- brutefir-1.0n/bfio_alsa.c 2016-08-09 11:00:28.000000000 +0000 +++ brutefir-1.0o/bfio_alsa.c 2016-08-09 13:21:47.000000000 +0000 @@ -655,9 +655,9 @@ } void -_init(void); -void -_init(void) +do_init(void); +void __attribute__((constructor)) +do_init(void) { memset(handles, 0, sizeof(handles)); memset(n_handles, 0, sizeof(n_handles)); diff -Nru brutefir-1.0n/bfio_file.c brutefir-1.0o/bfio_file.c --- brutefir-1.0n/bfio_file.c 2016-08-09 11:00:28.000000000 +0000 +++ brutefir-1.0o/bfio_file.c 2016-08-09 13:21:47.000000000 +0000 @@ -604,9 +604,9 @@ } void -_init(void); -void -_init(void) +do_init(void); +void __attribute__((constructor)) +do_init(void) { char s[1024]; diff -Nru brutefir-1.0n/bfio_jack.c brutefir-1.0o/bfio_jack.c --- brutefir-1.0n/bfio_jack.c 2016-08-09 11:00:28.000000000 +0000 +++ brutefir-1.0o/bfio_jack.c 2016-08-09 13:21:47.000000000 +0000 @@ -569,9 +569,9 @@ } void -_init(void); -void -_init(void) +do_init(void); +void __attribute__((constructor)) +do_init(void) { memset(hasio, 0, sizeof(hasio)); memset(handles, 0, sizeof(handles)); diff -Nru brutefir-1.0n/bflogic_eq.c brutefir-1.0o/bflogic_eq.c --- brutefir-1.0n/bflogic_eq.c 2016-08-09 11:00:28.000000000 +0000 +++ brutefir-1.0o/bflogic_eq.c 2016-08-09 13:21:47.000000000 +0000 @@ -534,7 +534,7 @@ equalisers[n].coeff[1] == equalisers[i].coeff[1])) { fprintf(stderr, "EQ: At least two equalisers has at least one " - "coefficent set in common.\n"); + "coefficient set in common.\n"); return -1; } } diff -Nru brutefir-1.0n/bfrun.c brutefir-1.0o/bfrun.c --- brutefir-1.0n/bfrun.c 2016-08-09 11:00:28.000000000 +0000 +++ brutefir-1.0o/bfrun.c 2016-08-09 13:21:47.000000000 +0000 @@ -96,20 +96,20 @@ struct intercomm_area { - bool_t doreset_overflow; + volatile bool_t doreset_overflow; int sync[BF_MAXPROCESSES]; - uint32_t period_us[BF_MAXPROCESSES]; - double realtime_index; + volatile uint32_t period_us[BF_MAXPROCESSES]; + volatile double realtime_index; struct bffilter_control fctrl[BF_MAXFILTERS]; struct bfoverflow overflow[BF_MAXCHANNELS]; uint32_t ismuted[2][BF_MAXCHANNELS/32]; - int delay[2][BF_MAXCHANNELS]; - int subdelay[2][BF_MAXCHANNELS]; - int n_pids; - pid_t pids[BF_MAXPROCESSES]; - int exit_status; - bool_t full_proc[BF_MAXPROCESSES]; - bool_t ignore_rtprio; + volatile int delay[2][BF_MAXCHANNELS]; + volatile int subdelay[2][BF_MAXCHANNELS]; + volatile int n_pids; + volatile pid_t pids[BF_MAXPROCESSES]; + volatile int exit_status; + volatile bool_t full_proc[BF_MAXPROCESSES]; + volatile bool_t ignore_rtprio; struct { uint64_t ts_start; diff -Nru brutefir-1.0n/brutefir.html brutefir-1.0o/brutefir.html --- brutefir-1.0n/brutefir.html 2016-08-09 11:00:28.000000000 +0000 +++ brutefir-1.0o/brutefir.html 2016-08-09 13:21:47.000000000 +0000 @@ -27,7 +27,7 @@
  • The problem of complexity
  • Problems with long FFTs
  • Partitioned convolution -
  • Optimising where it counts +
  • Optimizing where it counts
  • Conclusion
  • Where can I get it? @@ -57,7 +57,7 @@
  • Logic modules
  • Tuning @@ -77,8 +77,12 @@

    News

    2016-08-09
    -Maintenance release 1.0n, for package maintenance. No functional -change. +Maintenance release 1.0o. Second this day, was a bit trigger happy on +the first. Put in some minor bugfixes received from the Debian package +maintainer. + +

    2016-08-09
    +Maintenance release 1.0n, no functional change.

    2013-11-29
    There was still a typo in the last uploaded 1.0m affecting @@ -144,7 +148,7 @@ convolution algorithm is probably free to use in open-source software. There are still patents on this in other countries (such as the US), but with the corresponding patent revoked in Europe, they -will be hard to defened. Note that I'm not a patent lawyer, so if you +will be hard to defend. Note that I'm not a patent lawyer, so if you really are going to implement non-uniform partitioned convolution I recommend to consult a professional first, because there is no 100% clear prior art as in the uniform partitioned convolution case. @@ -190,7 +194,7 @@ several BruteFIR instances using JACK at the same time, and it is not necessary to connect to external ports at startup. The CLI can now take commands from a serial line. Additionally, a couple of remaining -bugs in the equaliser module have been fixed. +bugs in the equalizer module have been fixed.

    2004-08-07
    BruteFIR v1.0a. Minor update, removed the coefficient set limit and @@ -231,7 +235,7 @@ highlights: BruteFIR now employs FFTW3, there is support for 32 and 64 bits in the same binary and buffer over/underflows can be ignored. Among important bug fixes are that FFTW wisdom is now stored -properly, so it can be re-used more often, and the equaliser module +properly, so it can be re-used more often, and the equalizer module now sets the magnitude properly at the edges.

    2003-02-11
    @@ -247,7 +251,7 @@

    2003-02-02
    BruteFIR v0.99g. This release adds support for callback I/O. One callback I/O module is available, supporting JACK. This support means -that the program has went through quite radical reorganisations, so +that the program has went through quite radical reorganizations, so something might be broke. If you discover any problems, please let me know.

    2003-01-05
    @@ -277,7 +281,7 @@ BruteFIR v0.99c, is an important bug fix release. Among other fixes, it fixes the slightly embarrassing bug of incorrect reading of 3 byte 24 bit formats. Apart from many bug fixes, it adds double -buffer support to the equaliser module, and a simple script function +buffer support to the equalizer module, and a simple script function to the CLI. The risk of buffer underflow at startup has also been strongly reduced. @@ -292,11 +296,11 @@ href="http://www.ludd.ltu.se/~torger/almusvcu.html">AlmusVCU.

    2002-08-04
    -This new release (v0.99) contains a first version of an equaliser -module, which allows equalisation to be changed in runtime. Now the +This new release (v0.99) contains a first version of an equalizer +module, which allows equalization to be changed in runtime. Now the I/O delay is fixed, always exactly twice the filter block length (if the sound card hardware is properly designed). Good for -synchronisation with other audio processors, or clustering. There is +synchronization with other audio processors, or clustering. There is also a slight change in configuration file format, so you know why it will complain when run with an old configuration file. @@ -367,7 +371,7 @@ file I/O being the first modules available. It also supports logic modules, the old BruteFIR CLI being the first example. The logic modules can be used to achieve adaptive filtering. The new module -architecture will probably need some time to stabilise, and due to the +architecture will probably need some time to stabilize, and due to the large amount of changes to the code, there is a great risk that this new version is less stable than the last. A few details in the configuration file format has changed as well, for which the @@ -386,7 +390,7 @@

    2001-09-27
    New release, BruteFIR 0.96a. Some minor bugfixes, and at last processor capability detection code has been included, so BruteFIR -will detect SSE or 3DNow, and use the optimised code accordingly. +will detect SSE or 3DNow, and use the optimized code accordingly.

    2001-08-26
    Updated documentation to cover all the new features of BruteFIR 0.96. @@ -433,7 +437,7 @@

    2001-04-08
    Major changes and cleanups of this page has been done, and the source code has been re-released. The new version is 0.94, and contains a new -improved convolution algorithm with hand-coded assembler optimisations +improved convolution algorithm with hand-coded assembler optimizations for Intel's SSE and AMD's 3Dnow. With this, BruteFIR is now capable of even higher throughput. @@ -451,7 +455,7 @@ offline or in realtime. Its basic operation is specified through a configuration file, and filters, attenuation and delay can be changed in runtime through a simple command line interface. The FIR filter -algorithm used is an optimised frequency domain algorithm, partly +algorithm used is an optimized frequency domain algorithm, partly implemented in hand-coded assembler, thus throughput is extremely high. In realtime, a standard computer can typically run more than 10 channels with more than 60000 filter taps each. @@ -465,7 +469,7 @@

    The preferred operating system platform for the program is Linux [11], but it is easily -ported to other Unices as well, and supports for example FreeBSD out +ported to other Unixes as well, and supports for example FreeBSD out of the box. BruteFIR uses the high-performance FFTW library [7] for the Fast Fourier Transform (FFT, [5]) @@ -495,7 +499,7 @@