summaryrefslogtreecommitdiff
path: root/src/pcm
diff options
context:
space:
mode:
authorMax Kellermann <max@musicpd.org>2020-01-14 22:25:54 +0100
committerMax Kellermann <max@musicpd.org>2020-01-14 22:25:54 +0100
commit6bfbc5d32029e77bcae443d79ce40a5f1098afbf (patch)
tree24d0794c3fb545c708cd9aa913ff8450e7416001 /src/pcm
parente7483bc5bc2b98c59919b59d01042a96bf76202c (diff)
pcm/Dsd2Pcm: move code to CalcOutputSample()
Diffstat (limited to 'src/pcm')
-rw-r--r--src/pcm/Dsd2Pcm.cxx21
-rw-r--r--src/pcm/Dsd2Pcm.hxx3
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 */