aboutsummaryrefslogtreecommitdiffstats
path: root/src/dsd2pcm/dsd2pcm.hpp
diff options
context:
space:
mode:
authorSebastian Gesemann <unknown>2011-10-03 12:03:37 +0200
committerMax Kellermann <max@duempel.org>2011-10-04 21:34:30 +0200
commit3fcf463f9ef42aa0da0da4f9d0aed2e7aeda28bb (patch)
tree3d25b85fae36a8174ada6cc40cca4bae4b87e9d9 /src/dsd2pcm/dsd2pcm.hpp
parentf77cd63286bedbd995bed0e232498543e28d3957 (diff)
downloadmpd-3fcf463f9ef42aa0da0da4f9d0aed2e7aeda28bb.tar.gz
mpd-3fcf463f9ef42aa0da0da4f9d0aed2e7aeda28bb.tar.xz
mpd-3fcf463f9ef42aa0da0da4f9d0aed2e7aeda28bb.zip
import dsd2pcm_src.zip
[this is the code from dsd2pcm_src.zip, published on a forum by Sebastian Gesemann. Upon request, he has given permission to redistribute and modify his code, without referring to a specific license. - mk]
Diffstat (limited to '')
-rw-r--r--src/dsd2pcm/dsd2pcm.hpp41
1 files changed, 41 insertions, 0 deletions
diff --git a/src/dsd2pcm/dsd2pcm.hpp b/src/dsd2pcm/dsd2pcm.hpp
new file mode 100644
index 000000000..b1b2ae1c5
--- /dev/null
+++ b/src/dsd2pcm/dsd2pcm.hpp
@@ -0,0 +1,41 @@
+#ifndef DSD2PCM_HXX_INCLUDED
+#define DSD2PCM_HXX_INCLUDED
+
+#include <algorithm>
+#include <stdexcept>
+#include "dsd2pcm.h"
+
+/**
+ * C++ PImpl Wrapper for the dsd2pcm C library
+ */
+
+class dxd
+{
+ dsd2pcm_ctx *handle;
+public:
+ dxd() : handle(dsd2pcm_init())
+ { if (!handle) throw std::runtime_error("wtf?!"); }
+
+ dxd(dxd const& x) : handle(dsd2pcm_clone(x.handle))
+ { if (!handle) throw std::runtime_error("wtf?!"); }
+
+ ~dxd() { dsd2pcm_destroy(handle); }
+
+ friend void swap(dxd & a, dxd & b)
+ { std::swap(a.handle,b.handle); }
+
+ dxd& operator=(dxd x)
+ { swap(*this,x); return *this; }
+
+ void translate(size_t samples,
+ const unsigned char *src, ptrdiff_t src_stride,
+ bool lsbitfirst,
+ float *dst, ptrdiff_t dst_stride)
+ {
+ dsd2pcm_translate(handle,samples,src,src_stride,
+ lsbitfirst,dst,dst_stride);
+ }
+};
+
+#endif // DSD2PCM_HXX_INCLUDED
+