Re: [tim-janik/beast] Resampler cleanups (#125)



Since this PR wasn't merged yet, I simply force pushed an updated version. Since we have no more C API, I could modernize the C++ API. It should be used like this:

  float input[128];
  float output[256];
  Resampler2 resampler (Resampler2::UP, Resampler2::PREC_96DB);
  resampler.process_block (input, 128, output);

Note that process_block() still needs a virtual function call (like it used to be), but I did some benchmarking before refactoring the API. The performance difference between virtual function call and inlined resampler code is minimal. Like this, I could move all implementation bits back into bseresampler.cc, so bseresampler.hh is really clean and doesn't contain any actual resampling code, and bseresamplerimpl.hh could be removed.

I also re-added the old testresampler tests from the Makefile.am, these are added using TEST_SLOW, so out/tests/suite1 --slow is needed to run the tests. I also re-enabled the standalone testcode, passing args to the standalone main() from suite1 main()

$ testresampler perf # OLD
$ out/tests/suite1 --resampler perf # NEW

Btw, if you are interested in the impact of the block size on performance, here is upsampling with different block sizes (times in ns/sample) upsampling, PREC48_DB.

4 5.1589
8 3.52419
16 3.80419
32 3.079
64 2.48795
128 2.25006
256 2.09908
512 2.019

I recommend merging this PR first, then I can update the LadderFilter PR (#122) to use the new resampling API, then merge the LadderFilter.


You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub, or mute the thread.



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]