Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package libresidfp for openSUSE:Factory checked in at 2026-10-03 20:13:38 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/libresidfp (Old) and /work/SRC/openSUSE:Factory/.libresidfp.new.1631729 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "libresidfp" Sat Oct 3 20:13:38 2026 rev:9 rq:1382185 version:1.2.3 Changes: -------- --- /work/SRC/openSUSE:Factory/libresidfp/libresidfp.changes 2026-08-30 19:08:51.398376504 +0200 +++ /work/SRC/openSUSE:Factory/.libresidfp.new.1631729/libresidfp.changes 2026-10-03 20:15:36.387807880 +0200 @@ -1,0 +2,6 @@ +Fri Oct 2 20:38:51 UTC 2026 - Илья Индиго <[email protected]> + +- Updated to 1.2.3 + * https://github.com/libsidplayfp/libresidfp/releases/tag/v1.2.3 + +------------------------------------------------------------------- Old: ---- libresidfp-1.2.2.tar.gz New: ---- libresidfp-1.2.3.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ libresidfp.spec ++++++ --- /var/tmp/diff_new_pack.FTQcP7/_old 2026-10-03 20:15:37.115838321 +0200 +++ /var/tmp/diff_new_pack.FTQcP7/_new 2026-10-03 20:15:37.117838405 +0200 @@ -17,7 +17,7 @@ %define sover 0 Name: libresidfp -Version: 1.2.2 +Version: 1.2.3 Release: 0 Summary: Cycle exact SID emulation License: GPL-2.0-or-later ++++++ libresidfp-1.2.2.tar.gz -> libresidfp-1.2.3.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libresidfp-1.2.2/NEWS.md new/libresidfp-1.2.3/NEWS.md --- old/libresidfp-1.2.2/NEWS.md 2026-08-30 16:44:57.000000000 +0200 +++ new/libresidfp-1.2.3/NEWS.md 2026-10-02 20:14:11.000000000 +0200 @@ -1,3 +1,10 @@ +1.2.3 2026-10-02 +* Fixed sanitizer warning (#47) +* Adjusted 6581 combined waveforms (#54) (#55) +* Other minor fixes and improvements + + + 1.2.2 2026-08-30 * Correctly restore filter status diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libresidfp-1.2.2/README.md new/libresidfp-1.2.3/README.md --- old/libresidfp-1.2.2/README.md 2026-08-30 16:44:57.000000000 +0200 +++ new/libresidfp-1.2.3/README.md 2026-10-02 20:14:11.000000000 +0200 @@ -77,11 +77,11 @@ In addition to the standard build options the following are available: * `--enable-debug[=no/yes]`: -compile for debugging with inlining disabled and warnings +compile for debugging with inlining disabled, asserts and warnings (disabled by default) * `--enable-branch-hints`: -enable branch hints so the compiler can produce more optimized code +disable branch hints optimizations (enabled by default) * `--with-simd=<runtime/mmx/sse2/sse4/avx2/avx512f/none>`: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libresidfp-1.2.2/configure new/libresidfp-1.2.3/configure --- old/libresidfp-1.2.2/configure 2026-08-30 16:45:01.000000000 +0200 +++ new/libresidfp-1.2.3/configure 2026-10-02 20:14:15.000000000 +0200 @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.71 for libresidfp 1.2.2. +# Generated by GNU Autoconf 2.71 for libresidfp 1.2.3. # # # Copyright (C) 1992-1996, 1998-2017, 2020-2021 Free Software Foundation, @@ -618,8 +618,8 @@ # Identity of this package. PACKAGE_NAME='libresidfp' PACKAGE_TARNAME='libresidfp' -PACKAGE_VERSION='1.2.2' -PACKAGE_STRING='libresidfp 1.2.2' +PACKAGE_VERSION='1.2.3' +PACKAGE_STRING='libresidfp 1.2.3' PACKAGE_BUGREPORT='' PACKAGE_URL='https://github.com/libsidplayfp/libresidfp/' @@ -1397,7 +1397,7 @@ # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures libresidfp 1.2.2 to adapt to many kinds of systems. +\`configure' configures libresidfp 1.2.3 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1468,7 +1468,7 @@ if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of libresidfp 1.2.2:";; + short | recursive ) echo "Configuration of libresidfp 1.2.3:";; esac cat <<\_ACEOF @@ -1591,7 +1591,7 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -libresidfp configure 1.2.2 +libresidfp configure 1.2.3 generated by GNU Autoconf 2.71 Copyright (C) 2021 Free Software Foundation, Inc. @@ -2260,7 +2260,7 @@ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by libresidfp $as_me 1.2.2, which was +It was created by libresidfp $as_me 1.2.3, which was generated by GNU Autoconf 2.71. Invocation command line was $ $0$ac_configure_args_raw @@ -3748,7 +3748,7 @@ # Define the identity of the package. PACKAGE='libresidfp' - VERSION='1.2.2' + VERSION='1.2.3' printf "%s\n" "#define PACKAGE \"$PACKAGE\"" >>confdefs.h @@ -3896,7 +3896,7 @@ LIB_MAJOR=1 LIB_MINOR=2 -LIB_LEVEL=2 +LIB_LEVEL=3 @@ -22399,7 +22399,7 @@ # If any interfaces have been removed or changed since the last public release, then set age to 0. LIBRESIDFPCUR=2 -LIBRESIDFPREV=2 +LIBRESIDFPREV=3 LIBRESIDFPAGE=2 LIBRESIDFPVERSION=$LIBRESIDFPCUR:$LIBRESIDFPREV:$LIBRESIDFPAGE @@ -23831,7 +23831,7 @@ # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by libresidfp $as_me 1.2.2, which was +This file was extended by libresidfp $as_me 1.2.3, which was generated by GNU Autoconf 2.71. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -23891,7 +23891,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config='$ac_cs_config_escaped' ac_cs_version="\\ -libresidfp config.status 1.2.2 +libresidfp config.status 1.2.3 configured by $0, generated by GNU Autoconf 2.71, with options \\"\$ac_cs_config\\" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libresidfp-1.2.2/configure.ac new/libresidfp-1.2.3/configure.ac --- old/libresidfp-1.2.2/configure.ac 2026-08-30 16:44:57.000000000 +0200 +++ new/libresidfp-1.2.3/configure.ac 2026-10-02 20:14:11.000000000 +0200 @@ -1,6 +1,6 @@ m4_define([lib_major], [1]) m4_define([lib_minor], [2]) -m4_define([lib_level], [2]) +m4_define([lib_level], [3]) m4_define([lib_version], [lib_major.lib_minor.lib_level]) AC_PREREQ([2.62]) @@ -94,7 +94,7 @@ # If any interfaces have been removed or changed since the last public release, then set age to 0. LIBRESIDFPCUR=2 -LIBRESIDFPREV=2 +LIBRESIDFPREV=3 LIBRESIDFPAGE=2 LIBRESIDFPVERSION=$LIBRESIDFPCUR:$LIBRESIDFPREV:$LIBRESIDFPAGE diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libresidfp-1.2.2/src/ExternalFilter.h new/libresidfp-1.2.3/src/ExternalFilter.h --- old/libresidfp-1.2.2/src/ExternalFilter.h 2026-08-30 16:44:57.000000000 +0200 +++ new/libresidfp-1.2.3/src/ExternalFilter.h 2026-10-02 20:14:11.000000000 +0200 @@ -149,7 +149,12 @@ RESIDFP_INLINE int32_t ExternalFilter::clock(int32_t input) { +#if __cplusplus >= 202002L const int32_t Vi = input << 11; +#else + // Left shift of negative values is undefined + const int32_t Vi = input * (1 << 11); +#endif const int32_t dVlp = (w0lp_1_s7 * (Vi - Vlp)) >> 7; const int32_t dVhp = (w0hp_1_s17 * (Vlp - Vhp)) >> 17; Vlp += dVlp; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libresidfp-1.2.2/src/WaveformCalculator.cpp new/libresidfp-1.2.3/src/WaveformCalculator.cpp --- old/libresidfp-1.2.2/src/WaveformCalculator.cpp 2026-08-30 16:44:57.000000000 +0200 +++ new/libresidfp-1.2.3/src/WaveformCalculator.cpp 2026-10-02 20:14:11.000000000 +0200 @@ -1,7 +1,7 @@ /* * This file is part of libsidplayfp, a SID player engine. * - * Copyright 2011-2023 Leandro Nini <[email protected]> + * Copyright 2011-2026 Leandro Nini <[email protected]> * Copyright 2007-2010 Antti Lankila * * This program is free software; you can redistribute it and/or modify @@ -63,7 +63,7 @@ return std::pow(distance, -i); } -MAYBE_UNUSED static float linearDistance(float distance, int i) +static float linearDistance(float distance, int i) { return 1.f / (1.f + i * distance); } @@ -81,6 +81,8 @@ * * The score here reported is the acoustic error * calculated XORing the estimated and the sampled values. + * For the combinations including saw on 6581 only + * the first half of the wave is considered. * In parentheses the number of mispredicted bits. * * [1] https://github.com/libsidplayfp/combined-waveforms @@ -89,25 +91,25 @@ const CombinedWaveformConfig configAverage[2][5] = { { /* 6581 R3 0486S sampled by Trurl */ - // TS error 3555 (324/32768) [RMS: 73.98] - { exponentialDistance, 0.877322257f, 1.11349654f, 0.f, 2.14537621f, 9.08618164f }, - // PT error 4590 (124/32768) [RMS: 68.90] + // TS error 406 (764/32768) [RMS: -13.55] + { exponentialDistance, 0.79111582f, 1.06053483f, 0.f, 1.97922957f, 2.67848182f }, + // PT error 4590 (124/32768) [RMS: -11.40dB] { linearDistance, 0.941692829f, 1.f, 1.80072665f, 0.033124879f, 0.232303441f }, - // PS error 19352 (763/32768) [RMS: 96.91] - { linearDistance, 1.66494179f, 1.03760982f, 5.62705326f, 0.291590303f, 0.283631504f }, - // PTS error 5068 ( 94/32768) [RMS: 41.69] - { linearDistance, 1.09762526f, 0.975265801f, 1.52196741f, 0.151528224f, 0.841949463f }, + // PS error 211 (1030/32768) [RMS: -10.31] + { linearDistance, 1.09394681f, 1.42332006f, 3.44251633f, 0.0797301158f, 0.102444135f }, + // PTS error 57 (278/32768) [RMS: -18.51] + { linearDistance, 1.53609717f, 0.0391017497f, 1.67601228f, 1.44580793f, 1.42448807f }, // NP guessed { exponentialDistance, 0.96f, 1.f, 2.5f, 1.1f, 1.2f }, }, { /* 8580 R5 1088 sampled by reFX-Mike */ - // TS error 10660 (353/32768) [RMS: 58.34] + // TS error 10660 (353/32768) [RMS: -12.85dB] { exponentialDistance, 0.853578329f, 1.09615636f, 0.f, 1.8819375f, 6.80794907f }, - // PT error 10635 (289/32768) [RMS: 108.81] + // PT error 10635 (289/32768) [RMS: -7.43dB] { exponentialDistance, 0.929835618f, 1.f, 1.12836814f, 1.10453653f, 1.48065746f }, - // PS error 12255 (554/32768) [RMS: 102.27] + // PS error 12255 (554/32768) [RMS: -7.97dB] { quadraticDistance, 0.911938608f, 0.996440411f, 1.2278074f, 0.000117214302f, 0.18948476f }, - // PTS error 6913 (127/32768) [RMS: 55.80] + // PTS error 6913 (127/32768) [RMS: -13.23dB] { exponentialDistance, 0.938004673f, 1.04827631f, 1.21178246f, 0.915959001f, 1.42698038f }, // NP guessed { exponentialDistance, 0.95f, 1.f, 1.15f, 1.f, 1.45f }, @@ -117,25 +119,25 @@ const CombinedWaveformConfig configWeak[2][5] = { { /* 6581 R2 4383 sampled by ltx128 */ - // TS error 1474 (198/32768) [RMS: 62.81] - { exponentialDistance, 0.892563999f, 1.11905622f, 0.f, 2.21876144f, 9.63837719f }, - // PT error 612 (102/32768) [RMS: 43.71] + // TS error 169 (843/32768) [RMS: -14.61] + { exponentialDistance, 0.946056068f, 26.9527836f, 0.f, 6.38644743f, 3.61852479f }, + // PT error 612 (102/32768) [RMS: -15.35dB] { linearDistance, 1.01262534f, 1.f, 2.46070528f, 0.0537485816f, 0.0986242667f }, - // PS error 8135 (575/32768) [RMS: 75.10] - { linearDistance, 2.14896345f, 1.0216713f, 10.5400085f, 0.244498149f, 0.126134038f }, - // PTS error 2489 (60/32768) [RMS: 24.41] - { linearDistance, 1.22330308f, 0.933797896f, 2.83245254f, 0.0615176819f, 0.323831677f }, + // PS error 5 (1535/32768) [RMS: -15.71] + { linearDistance, 0.760607481f, 0.0588437207f, 0.407531887f, 0.0994859114f, 0.000200334835f }, + // PTS error 0 (138/32768) [RMS: -25.46] + { linearDistance, 1.10582423f, 0.578988612f, 1.94850934f, 0.0783150643f, 0.300926387f }, // NP guessed { exponentialDistance, 0.96f, 1.f, 2.5f, 1.1f, 1.2f }, }, { /* 8580 R5 4887 sampled by reFX-Mike */ - // TS error 741 (76/32768) [RMS: 53.74] + // TS error 741 (76/32768) [RMS: -13.56dB] { exponentialDistance, 0.812351167f, 1.1727736f, 0.f, 1.87459648f, 2.31578159f }, - // PT error 7199 (192/32768) [RMS: 88.43] + // PT error 7199 (192/32768) [RMS: -9.23] { exponentialDistance, 0.917997837f, 1.f, 1.01248944f, 1.05761552f, 1.37529826f }, - // PS error 9856 (332/32768) [RMS: 86.29] - { quadraticDistance, 0.968754232f, 1.00669801f, 1.29909098f, 0.00962483883f, 0.146850556f }, - // PTS error 4809 (60/32768) [RMS: 45.37] + // PS error 9849 (333/32768) [RMS: -9.45] + { quadraticDistance, 0.969898582f, 1.00785899f, 1.30233467f, 0.00962228701f, 0.146903187f }, + // PTS error 4809 (60/32768) [RMS: -15.03dB] { exponentialDistance, 0.941834152f, 1.06401193f, 0.991132736f, 0.995310068f, 1.41105855f }, // NP guessed { exponentialDistance, 0.95f, 1.f, 1.15f, 1.f, 1.45f }, @@ -145,25 +147,25 @@ const CombinedWaveformConfig configStrong[2][5] = { { /* 6581 R2 0384 sampled by Trurl */ - // TS error 20337 (1579/32768) [RMS: 88.57] - { exponentialDistance, 0.000637792516f, 1.56725872f, 0.f, 0.00036806846f, 1.51800942f }, - // PT error 5190 (238/32768) [RMS: 83.54] + // TS error 754 (2056/32768) [RMS: -18.87] + { exponentialDistance, 0.714277208f, 0.00729158986f, 0.f, 2.12244034f, 1.66707671f }, + // PT error 5190 (238/32768) [RMS: -9.73dB] { linearDistance, 0.924780309f, 1.f, 1.96809769f, 0.0888123438f, 0.234606609f }, - // PS error 31015 (2181/32768) [RMS: 114.99] - { linearDistance, 1.2328074f, 0.73079139f, 3.9719491f, 0.00156516861f, 0.314677745f }, - // PTS error 9874 (201/32768) [RMS: 52.30] - { linearDistance, 1.08558261f, 0.857638359f, 1.52781796f, 0.152927235f, 1.02657032f }, + // PS error 860 (1288/32768) [RMS: -8.28] + { linearDistance, 1.02248156f, 1.36571658f, 3.66920304f, 0.00203792308f, 0.0826661736f }, + // PTS error 60 (411/32768) [RMS: -17.97] + { linearDistance, 0.891591191f, 1.88450027f, 1.33901846f, 0.134212971f, 0.293466389f }, // NP guessed { exponentialDistance, 0.96f, 1.f, 2.5f, 1.1f, 1.2f }, }, { /* 8580 R5 1489 sampled by reFX-Mike */ - // TS error 4837 (388/32768) [RMS: 76.07] + // TS error 4837 (388/32768) [RMS: -10.54dB] { exponentialDistance, 0.89762634f, 56.7594185f, 0.f, 7.68995237f, 12.0754194f }, - // PT error 9266 (508/32768) [RMS: 127.83] - { exponentialDistance, 0.87147671f, 1.f, 1.44887495f, 1.05899632f, 1.43786001f }, - // PS error 13168 (718/32768) [RMS: 123.35] - { quadraticDistance, 0.89255774f, 1.2253896f, 1.75615835f, 0.0245045591f, 0.12982437f }, - // PTS error 6702 (300/32768) [RMS: 71.01] + // PT error 9242 (504/32768) [RMS: -6.03] + { exponentialDistance, 0.871706188f, 1.f, 1.44852948f, 1.05926013f, 1.43830109f }, + // PS error 13146 (713/32768) [RMS: -6.34] + { quadraticDistance, 0.892224431f, 1.22416508f, 1.74952936f, 0.0251259189f, 0.13089405f }, + // PTS error 6702 (300/32768) [RMS: -11.14dB] { linearDistance, 0.91124934f, 0.963609755f, 0.909965038f, 1.07445884f, 1.82399702f }, // NP guessed { exponentialDistance, 0.95f, 1.f, 1.15f, 1.f, 1.45f }, @@ -171,7 +173,7 @@ }; /// Calculate triangle waveform -static unsigned int triXor(unsigned int val) +inline unsigned int triXor(unsigned int val) { return (((val & 0x800) == 0) ? val : (val ^ 0xfff)) << 1; } @@ -182,15 +184,15 @@ * @param distancetable * @param pulsestrength * @param threshold - * @param accumulator the high bits of the accumulator value + * @param wave the waveform bits */ -int16_t calculatePulldown(float distancetable[], float topbit, float pulsestrength, float threshold, unsigned int accumulator) +int16_t calculatePulldown(float distancetable[], float topbit, float pulsestrength, float threshold, unsigned int wave) { float bit[12]; for (unsigned int i = 0; i < 12; i++) { - bit[i] = (accumulator & (1u << i)) != 0 ? 1.f : 0.f; + bit[i] = (wave & (1u << i)) != 0 ? 1.f : 0.f; } bit[11] *= topbit; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libresidfp-1.2.2/src/WaveformGenerator.h new/libresidfp-1.2.3/src/WaveformGenerator.h --- old/libresidfp-1.2.2/src/WaveformGenerator.h 2026-08-30 16:44:57.000000000 +0200 +++ new/libresidfp-1.2.3/src/WaveformGenerator.h 2026-10-02 20:14:11.000000000 +0200 @@ -393,7 +393,7 @@ // Triangle/Sawtooth output is delayed half cycle on 8580. // This will appear as a one cycle delay on OSC3 as it is latched // in the first phase of the clock. - if ((waveform & 3) && !is6581) + if (!is6581 && (waveform & 3)) { osc3 = tri_saw_pipeline & (no_pulse | pulse_output) & no_noise_or_noise_output; if (pulldown != nullptr) @@ -409,6 +409,7 @@ // when the sawtooth is selected if (is6581 && (waveform & 0x2) && ((waveform_output & 0x800) == 0)) { + // On some chips it doesn't happen with P+S msb_rising = false; accumulator &= 0x7fffff; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libresidfp-1.2.2/src/resample/PassThrough.h new/libresidfp-1.2.3/src/resample/PassThrough.h --- old/libresidfp-1.2.2/src/resample/PassThrough.h 2026-08-30 16:44:57.000000000 +0200 +++ new/libresidfp-1.2.3/src/resample/PassThrough.h 2026-10-02 20:14:11.000000000 +0200 @@ -35,20 +35,17 @@ private: /// Last sample - int outputValue; + int32_t outputValue = 0; public: - PassThrough() : - outputValue(0) {} - - bool input(int sample) override + bool input(int32_t sample) override { outputValue = sample; return true; } - int output() const override { return outputValue; } + int32_t output() const override { return outputValue; } void reset() override { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libresidfp-1.2.2/src/resample/Resampler.h new/libresidfp-1.2.3/src/resample/Resampler.h --- old/libresidfp-1.2.2/src/resample/Resampler.h 2026-08-30 16:44:57.000000000 +0200 +++ new/libresidfp-1.2.3/src/resample/Resampler.h 2026-10-02 20:14:11.000000000 +0200 @@ -38,7 +38,7 @@ protected: virtual int32_t output() const = 0; - Resampler() {} + Resampler() = default; public: virtual ~Resampler() = default; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libresidfp-1.2.2/src/resample/SincResampler.cpp new/libresidfp-1.2.3/src/resample/SincResampler.cpp --- old/libresidfp-1.2.2/src/resample/SincResampler.cpp 2026-08-30 16:44:57.000000000 +0200 +++ new/libresidfp-1.2.3/src/resample/SincResampler.cpp 2026-10-02 20:14:11.000000000 +0200 @@ -309,7 +309,7 @@ sample[sampleIndex] = sample[sampleIndex + RINGSIZE] = input; sampleIndex = (sampleIndex + 1) & (RINGSIZE - 1); - if (sampleOffset < 1024) + if (unlikely(sampleOffset < 1024)) { outputValue = fir(sampleOffset); ready = true; @@ -325,6 +325,7 @@ { std::fill(std::begin(sample), std::end(sample), 0); sampleOffset = 0; + outputValue = 0; } } // namespace reSIDfp diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libresidfp-1.2.2/src/resample/SincResampler.h new/libresidfp-1.2.3/src/resample/SincResampler.h --- old/libresidfp-1.2.2/src/resample/SincResampler.h 2026-08-30 16:44:57.000000000 +0200 +++ new/libresidfp-1.2.3/src/resample/SincResampler.h 2026-10-02 20:14:11.000000000 +0200 @@ -78,7 +78,7 @@ int32_t outputValue = 0; - int32_t sample[RINGSIZE * 2]; + int32_t sample[RINGSIZE * 2] = {0}; private: int32_t fir(int subcycle); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libresidfp-1.2.2/src/resample/ZeroOrderResampler.h new/libresidfp-1.2.3/src/resample/ZeroOrderResampler.h --- old/libresidfp-1.2.2/src/resample/ZeroOrderResampler.h 2026-08-30 16:44:57.000000000 +0200 +++ new/libresidfp-1.2.3/src/resample/ZeroOrderResampler.h 2026-10-02 20:14:11.000000000 +0200 @@ -40,28 +40,26 @@ private: /// Last sample - int32_t cachedSample; + int32_t cachedSample = 0; /// Number of cycles per sample const int cyclesPerSample; - int sampleOffset; + int sampleOffset = 0; /// Calculated sample - int32_t outputValue; + int32_t outputValue = 0; public: ZeroOrderResampler(double clockFrequency, double samplingFrequency) : - cachedSample(0), - cyclesPerSample(static_cast<int>(clockFrequency / samplingFrequency * 1024.)), - sampleOffset(0), - outputValue(0) {} + cyclesPerSample(static_cast<int>(clockFrequency / samplingFrequency * 1024.)) + {} bool input(int sample) override { bool ready = false; - if (sampleOffset < 1024) + if (unlikely(sampleOffset < 1024)) { outputValue = cachedSample + (sampleOffset * (sample - cachedSample) >> 10); ready = true; @@ -81,6 +79,7 @@ { sampleOffset = 0; cachedSample = 0; + outputValue = 0; } };
