aboutsummaryrefslogtreecommitdiff
path: root/src/dsd2pcm/dsd2pcm.hpp
blob: b1b2ae1c53d8d9ad77c237c2a13c78dc5db419e1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
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