diff options
author | Max Kellermann <max@musicpd.org> | 2020-01-14 22:25:54 +0100 |
---|---|---|
committer | Max Kellermann <max@musicpd.org> | 2020-01-14 22:25:54 +0100 |
commit | 6bfbc5d32029e77bcae443d79ce40a5f1098afbf (patch) | |
tree | 24d0794c3fb545c708cd9aa913ff8450e7416001 /src/pcm | |
parent | e7483bc5bc2b98c59919b59d01042a96bf76202c (diff) |
pcm/Dsd2Pcm: move code to CalcOutputSample()
Diffstat (limited to 'src/pcm')
-rw-r--r-- | src/pcm/Dsd2Pcm.cxx | 21 | ||||
-rw-r--r-- | src/pcm/Dsd2Pcm.hxx | 3 |
2 files changed, 17 insertions, 7 deletions
diff --git a/src/pcm/Dsd2Pcm.cxx b/src/pcm/Dsd2Pcm.cxx index fb327b299..007110918 100644 --- a/src/pcm/Dsd2Pcm.cxx +++ b/src/pcm/Dsd2Pcm.cxx @@ -161,6 +161,18 @@ Dsd2Pcm::Reset() noexcept */ } +inline float +Dsd2Pcm::CalcOutputSample(unsigned ffp) const noexcept +{ + double acc = 0; + for (unsigned i = 0; i < CTABLES; ++i) { + unsigned bite1 = fifo[(ffp -i) & FIFOMASK] & 0xFF; + unsigned bite2 = fifo[(ffp-(CTABLES*2-1)+i) & FIFOMASK] & 0xFF; + acc += ctables[i][bite1] + ctables[i][bite2]; + } + return acc; +} + void Dsd2Pcm::Translate(size_t samples, const unsigned char *src, ptrdiff_t src_stride, @@ -174,13 +186,8 @@ Dsd2Pcm::Translate(size_t samples, fifo[ffp] = bite1; src += src_stride; unsigned char *p = fifo + ((ffp-CTABLES) & FIFOMASK); *p = bit_reverse(*p); - double acc = 0; - for (unsigned i = 0; i < CTABLES; ++i) { - bite1 = fifo[(ffp -i) & FIFOMASK] & 0xFF; - unsigned bite2 = fifo[(ffp-(CTABLES*2-1)+i) & FIFOMASK] & 0xFF; - acc += ctables[i][bite1] + ctables[i][bite2]; - } - *dst = (float)acc; dst += dst_stride; + *dst = CalcOutputSample(ffp); + dst += dst_stride; ffp = (ffp + 1) & FIFOMASK; } fifopos = ffp; diff --git a/src/pcm/Dsd2Pcm.hxx b/src/pcm/Dsd2Pcm.hxx index eb8e178f6..3243afebf 100644 --- a/src/pcm/Dsd2Pcm.hxx +++ b/src/pcm/Dsd2Pcm.hxx @@ -73,6 +73,9 @@ public: const unsigned char *src, ptrdiff_t src_stride, bool lsbitfirst, float *dst, ptrdiff_t dst_stride) noexcept; + +private: + float CalcOutputSample(unsigned ffp) const noexcept; }; #endif /* include guard DSD2PCM_H_INCLUDED */ |